Как сделать отрицательный факт в PROLOG

голоса
0

Если у меня есть факт «Анна человек» в PROLOG я пишу, например:

person(anna).

Но то, что я пишу, если у меня есть факт «таблица не является Person». Я пытался

not(person(table)).

Но это не работает. Как писать негативные факты?

Задан 09/10/2019 в 12:54
источник пользователем
На других языках...                            


1 ответов

голоса
1

В Прологе, как правило, вы не должны утверждать отрицательный, как факт. Отсутствие положительного факта или испытательное правило приводит к отказу (или, точнее, «отсутствие доказуемости»).

Так что если вы только утверждать , что person(anna), то запрос person(anna).будет истинным (успех, или быть доказуемо), но person(table).будет ложным (невыполнению или не доказуемо) , как и ожидалось. Кроме того , запрос, person(X).будет давать только , X = annaкак ожидалось.

По умолчанию, если вы запрашиваете person(X)и нет лиц , определенных Пролог выдаст сообщение об ошибке , указывающей , что personявляется неизвестным предикатом. Если Вы предпочли бы , что Пролог просто не может в этом случае, есть вариант , вы можете установить (я знаю , что в SWI Prolog , в частности, но я не помню , что опция), или вы можете объявить person/1быть динамическим предикатом , если планируют утвердить personфакты в вашу базу данных динамически во время выполнения программы.

В рамках определения предиката, вы можете указать, что теплокровным животным является млекопитающее, но не человек. В этом случае, вы можете иметь:

warm_blooded_animal(X) :-
    mammal(X),
    \+ person(X).

Это немного надуманный только в качестве примера. В этом случае, вы с большей вероятностью определить mammalс точки зрения характеристики бытия теплокровные, и т.д., а не наоборот. Но вы получите идею ... Обратите внимание , что оператор not/1является устаревшим в пользу стандарта ISO \+/1.

Ответил 09/10/2019 в 16:35
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more