Глава 3 управление ходом выполнения программы

3. 1. Как выполняется запрос в прологе

Три семантические модели

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

Декларативная и процедурная модели были рассмотрены в гл. 1. В данном разделе рассказывается о работе модели в виде абстрактной машины. Работа этой машины поясняется через операции над стеком активных запросов. Вначале будет показано, как абстрактная машина выполняет Пролог-программу, в которой отсутствуют побочные эффекты управления. Затем рассматривается то, как управляющие конструкции, такие как сократить (cut) и повторить (repeat), влияют на работу абстрактной машины.

Выполнение запроса

Работу интерпретатора языка Пролог можно трактовать как рекурсивный циклический процесс унификации (т. е. сопоставления с эталоном) и вычисления подцелей. Действия интерпретатора инициируются запросом. В ходе выполнения этих действий интерпретатор "опустится" в структуру текущей программы настолько глубоко, насколько это окажется необходимым для того, чтобы найти факты, требующиеся для определения истинностного значения запроса. Затем интерпретатор вернется в исходное состояние, доказав или оказавшись не в состоянии доказать истинность запроса.

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

Активация согласующейся фразы

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

Успешное выполнение

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

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие