Входы и выходы процедуры вычисления списка целей
Рисунок 2. 9. Входы и выходы процедуры вычисления списка целей.
Смысл двух составляющих выхода такой:
(1) Признак успех/неуспех принимает значение "да", если цели достижимы, и "нет" - в противном случае. Будем говорить, что "да" сигнализирует об успешном завершении и "нет" - о неуспехе.
(2) Подстановка переменных порождается только в случае успешного завершения; в случае неуспеха подстановка отсутствует.
line();ПРОГРАММА
большой( медведь).
% Предложение 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)
Продолжение просмотра программы ниже предложения 5. Ни одно предложение не найдено. Поэтому возврат к шагу (2) и продолжение просмотра ниже предложения 7. Найдено предложение (8):
темный( Z) :- коричневый( Z).
Замена первой цели в списке на коричневый( Х), что дает
коричневый( X), большой( X)
(5) Просмотр программы для обнаружения предложения, сопоставимого коричневый( X). Найдено предложение коричневый( медведь). У этого предложения нет тела, поэтому список целей уменьшается до
большой( медведь)
(6) Просмотр программы и обнаружение предложения большой( медведь). У него нет тела, поэтому список целей становится пустым. Это указывает на успешное завершение, а соответствующая конкретизация переменных такова:
line();