Prolog 关系中的无限循环?

Prolog 关系中的无限循环?,prolog,Prolog,我将举一个简单的例子来说明我的问题 假设我有这样一个简单的知识库: connected(scotland,england). connected(england, wales). 现在我想询问英格兰是否与苏格兰相连,因为谓词is应该为true,反之亦然,所以我添加了以下规则: connected(X, Y) :- connected(Y,X). 而连接(英格兰、苏格兰)则返回True 然而,像connected(a,b)这样的查询将程序保持在无限循环中。我不知道如何修改我的规则。不要使用与事

我将举一个简单的例子来说明我的问题

假设我有这样一个简单的知识库:

connected(scotland,england).
connected(england, wales).
现在我想询问英格兰是否与苏格兰相连,因为谓词is应该为true,反之亦然,所以我添加了以下规则:

connected(X, Y) :- connected(Y,X).
而连接(英格兰、苏格兰)则返回True


然而,像connected(a,b)这样的查询将程序保持在无限循环中。我不知道如何修改我的规则。

不要使用与事实相同的名称作为规则。@Lower ok,因此将规则名称设置为connected2可以解决此问题,我可以看到递归停止的原因。但是,不可能有相同的名字吗?奇怪的是,你可以写连接的(苏格兰,英格兰),但不能写连接的(英格兰,苏格兰)。你可以写
connected2(X,Y):-connected(X,Y);已连接(Y,X)。
。那么
connected2(苏格兰,英格兰)
connected2(英格兰,苏格兰)
都是正确的。如果您希望查询两个位置是否连接
而不是
connected2
,请使用
connected
作为规则,并为事实选择不同的名称。