Информатика -продвинутый курс



         

ПРЕДИКАТ ОТСЕЧЕНИЯ И УПРАВЛЕНИЕ ЛОГИЧЕСКИМ ВЫВОДОМ В ПРОГРАММАХ - часть 2


если X>=Y то М=Х иначе M=Y.

На Прологе это записывается при помощи отсечения:

max(X,Y,X):-X>=Y,!

max(X, Y, Y).

Пример 3. Блокирование просмотра целей.

Программа 120

В.

D

А:

- В, С. (1)

С:

-D, !, Е. (2)

Е:

-F, G, H. (З)

?А.

Говорят, что дизъюнкт (1) «порождает» дизъюнкт (2), так как в правой части (1) есть литера С и эта же литера - в левой части (2). Аналогично дизъюнкт (2) «порождает» дизъюнкт (3). Если (3) неудачен, то в (2) выполнится отсечение: дизъюнкт (2) также считается неудачным, восстанавливается «родительская среда» (1), делается попытка найти альтернативное решение для В. Если бы (2) имело вид С: -D, Е. , то при неудаче в (3) была бы сделана попытка найти альтернативное решение для D.

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

Встроенный предикат fail не имеет аргументов. Он считается всегда ложным.

Пример: перебор всевозможных решений.

Программа 121

oc(cpm).

ос(msdos).

ос(unix).

печать-всех:-ос(X), write(X), fail.

?-печать-всех.




Содержание  Назад  Вперед