我想用 JIProlog 进行图形搜索。下面的示例memberchk
没有 . 但是,当我确实包含它时,Prolog 冻结,可能是因为无限搜索。
connected(ac,a,b). connected(ac,a,c). connected(ac,b,c).
connected(ac,b,a). connected(ac,c,a). connected(ac,c,b).
path(A,B,[AB]) :- connected(AB,A,B).
path(A,C,[H|T]) :- connected(H,A,B), path(B,C,T), \+ memberchk(H,T).
在这个答案中,我找到了原因(边缘列表尚未实例化)和解决方案的提示(使用freeze/2
)。但是,freeze/2
在我正在使用的 JIProlog 中不起作用。谁能帮我找到替代解决方案?
编辑:我知道一般来说,对于图表来说,这将是一个跟踪节点的解决方案,例如在这个例子中,但是对于我的特定应用程序,“节点”也可以在边缘,这就是我想要检查的原因被访问的边而不是被访问的节点。