Не понимаю результат Пролога

Я новичок в 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?


person user234159    schedule 07.10.2014    source источник


Ответы (1)


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

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

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

Демо.

person Sergey Kalinichenko    schedule 07.10.2014