Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное_пособие_флп.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
675.84 Кб
Скачать

5.2.3. Использование зеленых и красных отсечений

Отсечения бывают зеленые и красные.

Листинг 5.5. Использования зеленого отсечения в

задаче нахождения минимума двух чисел

predicates

minimum(real,real,real)

clauses

minimum(X,Y,X):-

X<=Y, !.

minimum(X,Y,Y):-

X >Y,!.

goal: minimum(3,5,Min)

Min=3

goal: minimum(6,5,Min)

Min=5

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

-Отбрасывает часть пространства поиска. Сведения, зафиксированные при отсечении, используются для сокращения дерева поиска, что уменьшает выполняемый путь обхода дерева и экономит время выполнения программы а также уменьшает объем используемой памяти.

Здесь имели место зеленые отсечения, то есть такие, добавление которых в программу не влияло на декларативный ее характер (Можно найти все решения, убирая заведомо лишние части дерева, которые все равно бы не привели к новым решениям. Удаление зеленого отсечения также не влияет на решения программы)

Замечание: программы с отсечением менее гибкие, чем без отсечения. Но если предполагается использовать программу только одним способом, то это не существенно.

Листинг 5.6. Использования красного отсечения

predicates

minimum(real,real,real)

clauses

minimum(X,Y,X):- X<=Y,!.

minimum(X,Y,Y).

Если X<=Y, то минимум X. В противном случае минимум равен Y.Вроде бы сравнения X и Y – излишни. Однако в приведенной ранее программе такое сравнение выполняется, и это – правильно. Здесь мы это сравнение из программы убрали. Поставим цель minimum(3,7,7) Ответ:yes, что неверно. То есть программа получилась логически ложной. Можно попытаться избавиться от ложных целей, сделав неявную унификацию явной:

minimum(X,Y,Z):- X<=Y,!,Z=X.

Но снова получаем логическую программу, которая может быть неверной как раз с точки зрения логики. Если аргументам X и Y –сопоставили значения, а Z-осталась свободной, то программа будет работать правильно. Если Z – связана, то может быть ошибка. Например, goal: minimum(8,9,7) –no.

Если применяем зеленые отсечения, то отбрасываем заведомо бесполезные ветви в дереве поиска.

Красные отсечения используются для устранения явных условий (заведомо выполнимых). Это иногда

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

Отсечение cut –мощный, но опасный оператор Пролога. Он многое позволяет, но за это приходится платить - программа становится трудной для понимания и легко сделать ошибку.

Выводы

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

Следствия: -

- отсечение отбрасывает все расположенные после него предложения. Если цель Р унифицирована с предложением, содержащим отсечение, и отсечение выполнено, то эта цель не может быть использована для построения решений с помощью предложений, расположенных ниже данного;

- отсечение отбрасывает все альтернативные решения конъюнкции целей, расположенных в предложении левее отсечений, то есть конъюнкция целей, стоящих перед отсечением, приводит не более чем к одному решению;

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