试图在Prolog中实现交换

时间:2013-03-10 23:16:03

标签: prolog commutativity

我正在努力创建一个知识库。我的问题有terminal/1connected/2,我已经定义了以下规则:

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)

1 个答案:

答案 0 :(得分: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).

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