Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пролог =).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.69 Mб
Скачать

5.1.3 Применение cut при выборе альтернатив.

Рассмотрим функцию Y(X):

/

? 0 , X < 3

?

Y= < 2 , 3 = < X < 6

?

? 4 , X >= 6

\

На прологе это запишется через бинарное отношение f(X, Y).

Процедура выглядит:

f(X, 0):- X < 3. f(X, 2):- 3 =< X, X < 6. f(X, 4):- 6 =< X.

Зададим вопрос:

?-f(1,Y),Y>2.

Таким образом последовательно проверяются все три предложения, хотя сразу ясно, что выполняется только одно. Как убрать неэффективность? Надо использовать отсечение-cut. Перепишем

f( X, 0):-X<3, !. f(X, 2):- 3=<X, X<6, !. f(X, 4):-6 =<X, !.

! указывает, что возврат из этой точки проводить не надо.

Что произойдет теперь? Для цели

?-f(1, Y), Y>2. no

После выполнения цели X<3 цель Y>2, не достигается, но откат не может произойти, так как стоит cut.

Таким образом сокращается перебор.

Аналогично для цели

?-f(5, Y), Y=0.

Здесь введение cut повышает эффективность программы, сокращая время перебора и объем памяти, не влияет на декларативное чтение программы.

После изъятия ! декларативный смысл не изменится.

Такое применение cut называют "зеленым отсечением".

"Зеленые отсечения" лишь отбрасывают те пути вычисления, которые не приводят к новым решениям.

Бывают и "красные отсечения", при изъятии которых меняется декларативный смысл программы.

5.1.4 Формальное описание действия отсечения.

Рассмотрим предложение

Н:-B1, B2,..., Bm, !,..., Bn.

Это предложение активизируется, когда некоторая цель G, будет сопоставляться с H.

Тогда G называют целью-родителем.

Если B1, B2,..., Bm выполнены, а после !, например в Bi, i>m, произошла неудача и требуется выбрать альтернативные варианты, то для B1, B2,..., Bm такие альтернативы больше не рассматриваются и все выполнение окончится неудачей. Кроме этого G будет связана с головой H, и другие предложения процедуры во внимание не принимаются.

Т.е. отсечение в теле предложения отбрасывает все предложения , расположенные после этого предложения.

Формально действие отсечения описывается так:

Пусть цель -родитель сопоставляется с головой предложения, в теле которого содержится отсечение.

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

5.2 Применение отсечения.

5.2.1 minimum(X, Y, M).

Найти минимальный элемент из двух.

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

?-minimum(2, 5, Y).