Процессом возврата можно управлять. Для этого предназначен системный предикат отсечение cut, который позволяет сокращать пространство поиска решений при возврате. Синтаксически использование отсечения в правиле выглядит как вхождение целевого утверждения с предикатом cut, не имеющим аргументов.Допускается вместо предиката cut использовать восклицательный знак: ”!” Как целевое утверждение этот предикат ”!” всегда согласуется с базой знаний и не может быть вновь согласован.
При прямом ходе доказательства некоторой цели отсечение выступает как истинное условие в теле правила и не оказывает никакого воздействия на процесс выполнения. Его назначение реализуется только при инициировании процесса возврата вследствие ложности одного из предикатов, расположенных после (справа или ниже) отсечения в теле правила. В этом случае, т.е. при прохождении отсечения в обратном направлении (слева направо), оно как бы объявляет, что цель, вызвавшая выполнение отсечения (родительская цель), не имеет других вариантов согласования, а потому процесс возврата осуществляется к предшествующей (расположенной левее от родительской) цели.
|
|
Действие отсечения сводится к следующим моментам:
-отсечение выбрасывает из рассмотрения все утверждения, расположенные после предложения, в котором находится отсечение;
-отсечение отбрасывает все альтернативные решения конъюнкции целей, стоящих перед отсечением, приводит не более чем к одному решению;
-отсечение не влияет на цели, расположенные правее его. В случае возврата они могут порождать более одного решения.
Отсечение при возврате сокращает пространство поиска вариантов доказательства.
Отсечение применяется для устранения бесконечных циклов, при программировании взаимоисключающих утверждений и при необходимости неудачного завершения доказательства цели. Рассмотрим один из этих случаев.
Пример. Вычисление факториала с устранением бесконечных циклов.