Отрицание как сбой в Прологе и отрицание по умолчанию в наборе Ответов Пролог - PullRequest
0 голосов
/ 28 февраля 2019

Мне очень трудно понять концепцию отрицания как провала в Прологе по сравнению с отрицанием по умолчанию в Прологе набора ответов.Может кто-нибудь объяснить мне, в чем разница.

1 Ответ

0 голосов
/ 01 марта 2019

Небрежно:

Если вы не выиграли в лотерею, вам нужно получить работу!

Пролог :

Хорошо, я куплю билет!

... позже ...

Полагаю, мне нужно устроиться на работу.

ASP :

Хорошо, я собираюсь найти работу (потому что я не знаю что я буду участвовать в лотерее).

Итак, «Отрицание по умолчанию» a по умолчанию нет, если не известно иначе , в то время как «Отрицание как сбой» означает сначала попытаться, толькотогда вы узнаете о сбое .

А теперь в коде:

win_lottery :- spend_money_on_ticket,
               fail.  % to actually win.

find_a_job.  % We can do that!

get_money :- win_lottery.
get_money :- not win_lottery, % (or \+)
             find_a_job.

ASP отвечает

find_a_job get_money

Пролог ответит get_money сtrue, но до тех пор он будет делать spend_money_on_ticket, что делает вас беднее.

(На самом деле, он даже купит два билета на каждый пункт get_money. И если бы он выиграл во второй раз, то get_money не удалось бы, поэтому правильная версия Prologis:

get_money :- win_lottery,
             !.
get_money :- find_a_job.

Но это больше не использует Negation-as-Failure.)

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