2013-05-12 103 views
0

我试图定义的“我的朋友的朋友就是我的朋友”,在序言中的规则,我有以下代码:序言陷入无限循环

friends(john,jake). 
friends(mike,hans). 
friends(hans,robert). 
friends(robert,angela). 

mutual_friendship(X,Y):- 
    friends(X,Y); 
    friends(Y,X). 

friendship(X,Y):- 
    mutual_friendship(X,Y),!; 
    mutual_friendship(Y,Z), friendship(Z,X). 

而且它确实是非常好,它能够通过汉斯和罗伯特发现迈克和安吉拉之间的友谊,问题是当我试图找到约翰和安吉拉之间的友谊时,例如,谁没有联系,但程序陷入无限循环。

回答

1

mutual_friendship/2在这里没有多少关系,我想。

而对于给定的事实

friends(john,jake). 
friends(mike,hans). 
friends(hans,robert). 
friends(robert,angela). 

,我们可以得到

?- friendship(john,angela). 
false. 

?- friendship(mike,angela). 
true . 
+0

我明白你在说什么,但鉴于已定义的朋友,想必这条规则将匹配任何人?有些事情不正确。 – 2013-05-12 16:18:38

+0

但你现在可以做友谊(迈克,安吉拉)。 ? – 2013-05-12 17:22:31

+0

答案更新 – 2013-05-12 22:01:55