родитель( том, Y),
предок( Y, пат)
Этот шаг вычислений показан на рис. 1.10, который представляет развитие ситуации, изображенной на рис. 1.9.
Рис. 1. 10. Продолжение процесса вычислений, показанного на рис. 1.9.
Имея теперь перед
собой
цели, система пытается достичь их в том порядке, каком они
записаны. Достичь первой из них легко, поскольку она
соответствует
факту из программы. Процесс установления соответствия - сопоставление (унификация) вызывает приписывание переменной Y значения
боб
. Тем самым достигается первая цель, а оставшаяся превращается в
предок( боб, пат)
Для достижения этой цели вновь применяется правило
предок( X ', Z ') :-
родитель( X ', Z ').
Голова этого правила должна соответствовать нашей текущей цели предок( боб, пат). Поэтому
X ' = боб, Z ' = пат
Текущая цель заменяется на
родитель( боб, пат)
Такая цель немедленно достигается, поскольку встречается в программе в качестве факта. Этот шаг завершает вычисление, что графически показано на рис. 1.11.
Рис. 1. 11. Все шаги достижения цели предок( том, пат). Правая
ветвь демонстрирует, что цель достижима.
Графическое представление шагов вычисления на рис. 1.11 имеет форму дерева. Вершины дерева соответствуют целям или спискам целей, которые требуется достичь. Дуги между вершинами соответствуют применению (альтернативных) предложений программы, которые преобразуют цель, соответствующую одной вершине, в цель, соответствующую другой вершине. Корневая (верхняя) цель достигается тогда, когда находится путь от корня дерева (верхней вершины) к его листу, помеченному меткой 'да'. Лист помечается меткой 'да', если он представляет собой простой факт. Выполнение пролог-программы состоит в поиске таких путей. В процессе такого поиска система может входить и в ветви, приводящие к неуспеху. В тот момент, когда она обнаруживает, что ветвь не приводит к успеху, происходит автоматический
Упражнение
1. 7. Постарайтесь понять, как