Листинг 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 –мощный, но опасный оператор Пролога. Он многое позволяет, но за это приходится платить - программа становится трудной для понимания и легко сделать ошибку.

Выводы

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

Следствия: -

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: