尝试在Prolog中实现交换性



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

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

由于我现在明白(我认为)的原因,这变成了一个无限递归。

然后,我试着搜索SO,发现了这个问题:替代表达"交换性"在开场白吗?。根据所提供的答案,我试图将上述事实更改为以下内容:

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)

我终于弄明白了。

我改了这个:

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)

最新更新