有没有办法让swi prolog打印其当前工作的推理树?

有没有办法让swi prolog打印其当前工作的推理树?,prolog,Prolog,这将对我的课程有很大帮助。您可以尝试通过跟踪证明信息来扩展普通的“普通”元解释器。 基本上,普通解释器如下所示: 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),[]). 求解([])。 solve(

这将对我的课程有很大帮助。

您可以尝试通过跟踪证明信息来扩展普通的“普通”元解释器。 基本上,普通解释器如下所示:

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),[]). 求解([])。 solve([A | T]):-solveu原子(A),solve(T)。 求解原子(A):-my_子句(A,B),solve(B)。 my_子句(doubleapp(X,Y,Z,R),[app(X,Y,I),app(I,Z,R)])。 my_子句(app([],L,L),[])。 您可以向解释器添加额外的参数,以跟踪解析步骤。。。 您可能希望使用内置子句/2而不是my_子句(这样您就不必手动插入要跟踪的程序)

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

但也许SWI中有一个更简单的解决方案,我不知道