我是否要进入无限递归循环?

时间:2019-07-18 16:36:49

标签: python prolog swi-prolog pydatalog

我已经在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']

0 个答案:

没有答案