2013-05-12 3 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

Я получаю то, что вы говорите, но, учитывая, друзей, которые были определены, конечно, это правило не будет соответствовать никто ? Что-то там не так. –

+0

Но можете ли вы теперь дружить (mike, angela). ? –

+0

ответ обновлен –

Смежные вопросы