Процедурная семантика (процедурный смысл) пролог-программы определяет, как пролог-программа отвечает на вопросы.
Ответить на вопрос - это значит удовлетворить цели.
Поэтому процедурная семантика пролога - это процедура вычисления списка целей с учетом программы.
Рассмотрим программу и на ее примере - процедуру вычисления списка целей.
Входом процедуры являются программа и список целей, выходом процедуры являются признак успех / неуспех и подстановка переменных. Подстановка переменных порождается только в случае успешного завершения. Рассмотрим пример, иллюстрирующий процедурную семантику Пролога:
большой (медведь). % факт 1
большой (слон). % факт 2
маленький (кот). % факт 3
коричневый (медведь). % факт 4
черный (кот). % факт 5
|
|
серый (слон). % факт 6
темный (Z):- черный (Z). % правило 1:
темный (Z):- коричневый (Z). % правило 2:
?- темный (Х), большой (Х).
Шаги вычисления:
Исходный список целевых утверждений:
темный (Х), большой (Х).
Просмотр всей программы от начала к концу и поиск предложения, у которого голова совпадает с первым целевым утверждением темный (Х).
Найдено правило 1:
темный (Z):- черный(Z).
Порождается новый список целевых утверждений
черный (Х), большой (Х)
Просмотр программы для нахождения предложения, сопоставимого с черный (Х). Найдено предложение 5: черный (кот). У этого предложения нет тела, поэтому список целей при соответствующей конкретизации сокращается до
большой (кот)
Просмотр программы в поисках цели большой (кот). Ни одно предложение не найдено. Поэтому происходит возврат к шагу (3) и отмена конкретизации Х = кот. Список целей теперь снова
черный (Х), большой (Х)
Продолжение просмотра программы ниже факта 5. Ни одно предложение не найдено. Поэтому возврат к шагу (2) и продолжение просмотра ниже правила 1. Найдено
Правило 2: темный (Z), коричневый (Z)
Замена первой цели в списке на коричневый (Х) дает
коричневый (Х), большой(Х)
Просмотр программы для обнаружения предложения, сопоставимого коричневый (Х). Найдено предложение коричневый (медведь). У этого предложения нет тела, поэтому список целей уменьшается до
|
|
большой (медведь)
6. Просмотр программы и обнаружение факта большой (медведь). У него нет тела, поэтому список целей становится пустым. Это указывает на успешное завершение процедуры.
Таким образом, для вычисления целей потребовалось 7 сопоставлений и один откат.
Рассмотрим список целей:
G1 | G2 | … | Gm |
1. Если список целей пуст, то имеем успех, если нет, то выполнятся пункт 2.
2. Берется первая цель G1 из списка. Пролог выбирает в базе данных,
просматривая сначала, первое предложение С:
С:- B1, B2,..., Bn
голова которого, сопоставляется с целью G1.
Если такого предложения нет, то неудача.
Если есть, то переменные конкретизируются, и цель G1 заменяется на список целей
B1 | B2 | … | Bn |
с конкретизированными значениями переменных.
3. Рассматривается рекурсивно через п.2 новый список целей.
B1 | B2 | … | Bn | G2 | … | Gm |
Если С -факт, то новый список короче на одну цель.
Если вычисление нового списка оканчивается успешно, то и исходный список целей выполняется успешно.
Если нет, то новый список целей отбрасывается, снимается конкретизация переменных и происходит возврат к просмотру программы, но начиная с предложения, следующего за предложением С.