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

Глава 7 Механизм возврата и процедурная семантика

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

7.1. Механизм возврата

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

В качестве примера рассмотрим утверждения:

меньше(X,Y) :-

XY,write(X),

write('меньше, чем'), write(Y).

меньше(X,Y) :-

XY,write(Y),

write('меньше, чем'), write(X).

Целевое утверждение

?- меньше(5,2).

сопоставляется с головой первого утверждения при Х=5 и Y=2. Одна­ко не удастся согласовать первый член конъюнкции в теле утвержде­ния X<Y. Значит, Пролог не может использовать первое утвержде­ние для согласования целевого утверждения меньше(5,2). Тогда Пролог переходит к следующему утверждению, голова которого со­поставима с целевым утверждением. В нашем случае это второе утверждение. При значениях переменных Х=5 и Y=2 тело утверждения согласуется. Целевое утверждение меньше(5,2) доказано, и Пролог выдаст сообщение «2 меньше, чем 5».

Запрос

?- меньше(2,2).

сопоставляется с головой первого утверждения, но тело утверждения согласовать не удается. Затем происходит сопставление с головой второго утверждения, но согласовать тело опять-таки оказывается невозможно. Поэтому попытка доказательства целевого утвержде­ния меньше(2,2) заканчивается неудачей.

Такой процесс согласования целевого утверждения путем прямо­го продвижения по программе мы называем прямой трассировкой (forward tracking). Даже если целевое утверждение согласовано, с помощью прямой трассировки мы можем попытаться получить дру­гие варианты его доказательства, т.е. вновь согласовать целевое ут­верждение.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]