我正在尝试创建一个知识库。我的问题有terminal/1
和connected/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)
。