Prolog陷入无限循环

时间:2013-05-12 15:53:29

标签: loops recursion prolog infinite transitivity

我正在尝试在prolog中定义“我朋友的朋友是我的朋友”的规则,我有以下代码:

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 个答案:

答案 0 :(得分:1)

我想,

mutual_friendship/2在这里并没有多大关系。

friendship(X,Y):-
    ( friends(X,Y)
    ; friends(X,Z), friendship(Z,Y)
    ).

并且对于给定的事实

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

我们可以得到

?- friendship(john,angela).
false.

?- friendship(mike,angela).
true .