2010-04-06 25 views

回答

1

您可以通过追踪证明信息来尝试并扩展简单的“香草”元译员。 基本上,普通的香草解释如下所示:

 
solve([]). 
solve([A|T]) :- solve_atom(A), solve(T). 

solve_atom(A) :- my_clause(A,B), solve(B). 

my_clause(doubleapp(X,Y,Z,R),[app(X,Y,I),app(I,Z,R)]). 
my_clause(app([],L,L),[]). 

您可以添加一个额外的参数来解释跟踪解决步骤,... 也许,你会希望使用内置的条款/ 2而不是my_clause(这样你就不必手动插入你想要跟踪的程序)。

我实际上为我的演讲写了一个SICStus Prolog的(草稿)解决方案。它可以从命令行运行。 应该很容易适应SWI。 它可以生成SLD树或And-Or-Tree的点表示形式。 我可以根据要求向您发送源代码。

但是,也许SWI内置了一个更简单的解决方案,我不知道。

相关问题