Программирование на языке Пролог для искусственного интеллекта | страница 32
>большой( медведь). % Предложение 1
>большой( слон). % Предложение 2
>маленький( кот). % Предложение 3
>коричневый ( медведь). % Предложение 4
>черный ( кот). % Предложение 5
>серый( слон). % Предложение 6
>темный( Z) :- % Предложение 7:
> черный( Z). % любой черный
> % объект является темным
>темный( Z) :- % Предложение 8:
> коричневый( Z). % Любой коричневый
> % объект является темным
>?- темный( X), большой( X) % Кто одновременно темный
> % и большой?
(1) Исходный список целевых утверждений:
>темный( X), большой( X).
(2) Просмотр всей программы от начала к концу и поиск предложения, у которого голова сопоставима с первым целевым утверждением
>темный( X).
Найдена формула 7:
>темный( Z) :- черный( Z).
Замена первого целевого утверждения конкретизированным телом предложения 7 — порождение нового списка целевых утверждений.
>черный( X), большой( X)
(3) Просмотр программы для нахождения предложения, сопоставимого с >черный( X)
. Найдено предложение 5: >черный ( кот)
. У этого предложения нет тела, поэтому список целей при соответствующей конкретизации сокращается до
>большой( кот)
(4) Просмотр программы в поисках цели >большой( кот)
. Ни одно предложение не найдено. Поэтому происходит возврат к шагу (3) и отмена конкретизации >X = кот
. Список целей теперь снова
>черный( X), большой( X)
Продолжение просмотра программы ниже предложения 5. Ни одно предложение не найдено. Поэтому возврат к шагу (2) и продолжение просмотра ниже предложения 7. Найдено предложение (8):
>темный( Z) :- коричневый( Z).
Замена первой цели в списке на >коричневый( X)
, что дает
>коричневый( X), большой( X)
(5) Просмотр программы для обнаружения предложения, сопоставимого >коричневый( X)
. Найдено предложение >коричневый( медведь)
. У этого предложения нет тела, поэтому список целей уменьшается до
>большой( медведь)
(6) Просмотр программы и обнаружение предложения >большой( медведь)
. У него нет тела, поэтому список целей становится пустым. Это указывает на успешное завершение, а соответствующая конкретизация переменных такова:
Рис. 2.10. Пример, иллюстрирующий процедурную семантику Пролога: шаги вычислений, выполняемых процедурой >вычислить
.
В главе 1 в разд. "Как пролог-система отвечает на вопросы" мы уже фактически рассмотрели, что делает процедура >вычислить
. В оставшейся части данного раздела приводится несколько более формальное и систематическое описание этого процесса, которое можно пропустить без серьезного ущерба для понимания остального материала книги.