Отрицание в явной форме
Встроенный предикат not (“не”) имеет один аргумент. Этим аргументом является цель, значение истинности которой (после обработки данного запроса) заменяется противоположным. Если запрос успешен, то отрицание этой цели (запроса) является неудачей и, наоборот, если запрос терпит неудачу, то его отрицание будет успехом. Запрос
?- not(отец (питер, X).
будет истинным тогда и только тогда, когда
?- отец (питер, X )
потерпит неудачу.
Переменные в цели с предикатом not квантифицированы универсальным образом (т. е. используется квантор всеобщности).
Пример.
Напишем правило, определяющее сельского жителя как человека, который не является ни горожанином, ни жителем пригорода.
горожанин(джек).
житель_пригорода(сюзан).
сельский_ житель(X):-
not(горожанин(X)),
not(житель_ пригорода(X)).
?- сельский_житель (билл).
Yes.
Всякая точная наука основывается на приблизительности.
Бертран Рассел