PROLOG分辨率遍历,可视化?

PROLOG分辨率遍历,可视化?,prolog,visualization,Prolog,Visualization,通过合理的努力,是否可以可视化PROLOG如何找到查询的结果? 这将有助于理解它通过哪些路径找到了一些重复条目(例如,在族谱查询中两次找到一个亲戚)。据我所知,拥有一个增强的纯Prolog解释器的标准方法是增强一个标准的纯Prolog解释器: solve(T):- (T=(A,B)->求解(A),求解(B) ;T=(A;B)->(解算(A);解算(B)) (T)。 我们可以在每个步骤中使用copy_term/2,并将复制的术语收集到差异列表中: solve(T[Q | R],Z):-copy_

通过合理的努力,是否可以可视化PROLOG如何找到查询的结果?
这将有助于理解它通过哪些路径找到了一些重复条目(例如,在族谱查询中两次找到一个亲戚)。

据我所知,拥有一个增强的纯Prolog解释器的标准方法是增强一个标准的纯Prolog解释器:

solve(T):-
(T=(A,B)->求解(A),求解(B)
;T=(A;B)->(解算(A);解算(B))
(T)。
我们可以在每个步骤中使用
copy_term/2
,并将复制的术语收集到差异列表中:

solve(T[Q | R],Z):-copy_项(T,Q),
(T=(A,B)->解(A,R,S),解(B,S,Z)
;T=(A;B)->(求解(A,R,Z);求解(B,R,Z))
;T,R=Z)。
被称为
solve(AQuery,pathtaked,[])


未测试。

我只能找到执行simular任务的方法,但尚未尝试。作者声称它“为给定的Prolog查询生成解析树的图像”。

通常,Prolog解释器有一个调试器,您可以在子句前面加上:-?顺便问一下,有没有一种好方法可以消除由于多个分支查找而导致的重复结果,而不破坏任何内容?如果没有任何优雅或预定义的内容,我想我应该制作自己的findall,它可以对结果列表进行后期筛选,以查找重复项。我有一个元解释器,它可以创建一个包含所有节点信息和边的XML。然后,我使用在yED中创建的文件来可视化派生树。非常有用。