我正在尝试在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).
它做得非常好,它能够通过汉斯和罗伯特发现迈克和安吉拉之间的友谊,问题是当我试图找到约翰和安吉拉之间的友谊时,例如,他们没有联系,但是程序陷入无限循环。
答案 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 .