1
假定你有以下事实:Prolog的回溯和执行等语句太
sister(susan, jane).
sister(karren,holtby).
parent_of(susan,karren).
parent_of(susan,holtby).
而且以下定义:
sibling(X, Y) :-
sister(X, Y).
sibling(X, Y) :-
parent_of(Z, X), parent_of(Z, Y).
是否有任何理由为什么目标sibling(susan, jane)
给人以真,那么假。是否使用了两个定义?
有没有办法只检查所有的定义为true,并输出true,如果是的话?
当我用你的代码尝试“姐姐(苏珊,简)”。我只是得到“真实”。你的意思是“兄弟姐妹”(苏珊,简)。如果是这样,那将产生“真实”,但是有一个选择点来检查更多的解决方案。如果您按“'查看更多”,则会返回“false”,因为没有更多解决方案。 – lurker
对不起,我有一个错字。它应该是兄弟姐妹(苏珊,简)。我了解回溯,但有什么办法来防止它? – kype
你可以添加一个剪辑:'同胞(X,Y): - 姐姐(X,Y),!“这就表示如果'X'和'Y'是姐妹,那么他们是兄弟姐妹,你不想在'X'和'Y'之间寻找更多的兄弟姐妹。但这可能会在其他情况下消除您想要的解决方案。为什么你想摆脱回溯?这是Prolog如何工作的正常部分。 – lurker