Пролог попадает в бесконечный цикл
Я пытаюсь определить правило "Друг моего друга - мой друг" в прологе, и у меня есть следующий код:
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
я полагаю, это не имеет к этому никакого отношения.
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 .