Иногда необходимо иметь доступ только к определенной части данных. В этом случае используется метод ОО для фильтрации данных, извлеченных из базы. Отсечение применяется для устранения бесконечных циклов, при программировании взаимоисключающих утверждений и при необходимости неудачного завершения доказательства цели. Средство управления откатом- предикат cut (отсечение)
Этот предикат всегда вычисляется успешно и заставляет забыть все указатели отката, установленные во время попыток вычислить текущую подцель, т.е. устанавливается барьер, запрещающий выполнить откат по всем альтернативным решениям текущей цели.
Но последующие подцели могут создать новые указатели отката и тем самым создать условия поиска новых решений. Но если все более поздние цели окажутся неуспешными, то барьер cut заставит механизм отката отсечь все решения в области действия cut путем немедленного отката к другим возможным решениям вне области действия cut. Метод ОО использует fail для имитации неуспешного вычисления и выполнения последующего отката до тех пор, пока не будет обнаружено определенное условие. Предикат cut служит для устранения всех последующих откатов.
Пример: Напечатать список детей до Петра включительно
domain
person = symbol –дети
preducates
child (person) – список
show (показывает список)
make_cut (отсекает на Петре)
gool
write («Дети»), nl, show.
clauses
child («маша»)
child («мила»)
child («Миша»)
child («Петр»)
child(“Катя”)
show :– child (Name), write («имя», Name)б,nl,
make_cut (Name), !.
make_cut (Name):- Name = «Петр».