Использование предиката not как средства управления

Предикат not использовался ранее, добавим несколько замечаний.

Умея теперь использовать предикаты fail и cut

можно написать:

not(P):-

P,

!,

fail;

true.

 

Иначе это можно записать так:

not(P):-P, !, fail.

not(P).

 

Здесь требуется именно такой порядок правил. Процедуры, в которых порядок правил может изменить значение программы, следует рассматривать как единый объект, а не как набор отдельных предложений. Отношение not здесь отличается от строгого логического отрицания. Оно трактуется как отсутствие. В дереве поиска должны отсутствовать успешные вершины, но не должно существовать бесконечных ветвей.

Предполагается, что not –встроенная процедура.

Информация о фактах, которые не являются истинными и об отношениях, которые не соблюдаются, называется отрицательной информацией. В явной форме такая информация в программе не хранится. Просто считается, что вся информация, отсутствующая в программе, ложна.