我已经在Prolog中编写了一个程序,我想使用pyDatalog在python中重现结果。以下是我的程序的摘要。
要概述我的问题,我将节点('a','b','c'和'd')通过箭头('w1,'w2','w3'和'w4 ')。
我想生成连接我指定的任何两个节点的箭头列表。我在本文中使用的方法与在Prolog中使用的方法几乎相同,但是在运行时它从未完成执行,因此我想知道我是否在调用无限递归。我将非常感谢您的帮助,并在最后附上了我的Prolog程序。
from pyDatalog import pyDatalog
pyDatalog.create_terms('A, B, C, O, X')
pyDatalog.create_terms('con, this_c')
+con('w1','a','c')
+con('w2','c','b')
+con('w3','b','d')
+con('w4','d','a')
this_c(O, A, B) <= con(O, A, B)
this_c(O, A, B) <= con(X, A, C) & this_c(O, C, B)
print(this_c(O, 'a', 'b'))
我在序言中的代码如下。
con('w1',a,c).
con('w2',c,b).
con('w3',b,d).
con('w4',d,a).
up('w1').
up('w3').
down('w2').
down('w4').
check(X,Y):-up(X),atom_concat('+', X, Y).
check(X,Y):-down(X),atom_concat('-', X, Y).
comb(Output,Input,A,B):- con(X,A,B), check(X,Y), append([Y],Input,Output).
comb(Output,Input,A,B):- comb(Out,Input,A,C),con(X,C,B), check(X,Y), append([Y],Out,Output).
如果我查询comb(O,[],a,b)
,则输出为O = ['-w2', '+w1']