2014-10-07 4 views
2

Я новичок в Prolog. У меня есть этот код:Не понимаю результат Prolog

loves(vincent, mia). 
loves(marsellus,mia). 
jealous(X,Y):- loves(X,Z), loves(Y,Z). 

Я запросил jealous(vincent,W). Но SWI-Prolog дает мне W = vincent! Не должно быть W = marsellus?

ответ

3

Это только первый результат, который вы получите. Если вы попросите интерпретатора Prolog дать вам следующий результат, вы также получите marsellus.

Проблема с вашим правилом в том, что он не запрещает X от зависти к себе. Чтобы это исправить, добавить условие, что X не должно быть равно Y:

jealous(X,Y):- loves(X,Z), loves(Y,Z), X \= Y. 

Demo.