2013-03-10 41 views
0

我正在尝试创建知识库。我的问题有terminal/1connected/2,我已经定义了以下规则:试图在Prolog中实现交换性

connected(X,Y) :- connected(Y,X). 

至于原因,我现在明白了(我认为),这进入无限循环。

然后,我尝试搜索SO,发现这个问题:Alternative to express "Commutativity" in Prolog? 。根据所提供的答案,我想我的上述事实更改为以下:

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y). 
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y). 

然而,这并没有给我我所期待的结果。如果我定义了一个规则connected(t1,t7),我希望得到yes,如果我问connected(t7,t1)这个问题。

+0

您在SWI中使用'/ \'?这应该是','。 – false 2013-03-11 17:49:06

+0

你的意思是','而不是'正斜杠反斜杠'? – karancan 2013-03-11 18:46:27

+0

是的。 '(',')/ 2'在Prolog中是连接的。 – false 2013-03-12 00:10:09

回答

0

我设法弄清楚了这一点。

我改变了这个:

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y). 
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y). 

到:

is_connected(X, Y) :- connected(Y, X); connected(X, Y). 

事实证明,我还需要问的问题修正。我现在要问的是is_connected(X,Y),而不是询问connected(X,Y)