2

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

4

0 回答 0