Использование предиката not как средства управления
Предикат not использовался ранее, добавим несколько замечаний.
Умея теперь использовать предикаты fail и cut
можно написать:
not(P):-
P,
!,
fail;
true.
Иначе это можно записать так:
not(P):-P, !, fail.
not(P).
Здесь требуется именно такой порядок правил. Процедуры, в которых порядок правил может изменить значение программы, следует рассматривать как единый объект, а не как набор отдельных предложений. Отношение not здесь отличается от строгого логического отрицания. Оно трактуется как отсутствие. В дереве поиска должны отсутствовать успешные вершины, но не должно существовать бесконечных ветвей.
Предполагается, что not –встроенная процедура.
Информация о фактах, которые не являются истинными и об отношениях, которые не соблюдаются, называется отрицательной информацией. В явной форме такая информация в программе не хранится. Просто считается, что вся информация, отсутствующая в программе, ложна.