Пролог программирование - простой отрицательный запрос - PullRequest
3 голосов
/ 17 января 2011

Моя база данных:

eat(magi,limo).
eat(nona,banana).

Как мне спросить: «Кто не ест лимузин?» Это:

eat(X,not(limo)).

Не работает. (

Ответы [ 2 ]

8 голосов
/ 17 января 2011

Прежде всего limo является символом, и вы не можете отрицать символы. То, что вы хотите сделать, это отрицать предикат, то есть not(eat(X, limo)).

Однако это все равно не даст вам nona в результате. Почему бы и нет? Ну, есть бесконечно много значений X, для которых eat(X, limo) будет ложным. Системе нужно больше информации, чем «X не ест лимузин», чтобы узнать, какой вы хотите. Вместо этого нам нужно попросить X такой, что «Х ест что-то, но Х не ест лимузин». Это приводит нас к следующему запросу:

eat(X,Y), not(eat(X, limo)).

Что дает нам nona в качестве решения для X.

0 голосов
/ 17 января 2011

eat(X, Y), Y \= limo, writeln(X), false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...