Пролог Как пропустить факт - PullRequest
0 голосов
/ 25 мая 2018

Как видно из названия, как я могу это сделать?У меня есть эта база знаний

person(alice).
person(mark).
person(sally).

likes(alice,coke).
likes(alice,fanta).
likes(alice,sprite).
likes(mark,water).
likes(mark,coffee).
likes(sally,pepsi).

И я хочу выводить каждый напиток, который нравится Алисе, но не фанта. Может кто-нибудь объяснить, как этого добиться и почему это делается таким образом?

1 Ответ

0 голосов
/ 25 мая 2018

Если вы введете запрос likes(alice, X), вы получите все напитки, которые нравятся Алисе, включая fanta:

?- likes(alice, X).
X = coke ;
X = fanta ;
X = sprite.

Если вы добавите цель X \= fanta в сочетании с этим (примечание: должно прийти после),затем, когда X привязан к fanta, он не достигнет цели X \= fanta и вернется назад, чтобы найти другие варианты:

?- likes(alice, X), X \= fanta.
X = coke ;
X = sprite.

(примечание: нажатие ; для получения следующеговыбор)

Рекомендуемое чтение: Поиск доказательства

...