32
Все попытки вычислить эту подцель неуспешны, так как программа не
содержит утверждения color(pears,red). Подцель вычислена неуспешно.
Внутренние унификационные подпрограммы выполняют откат к по-
следнему указателю, который установлен на fruit(pears). Это сопоставление
неуспешно, так что механизм отката повторяет откат к ближайшему преды-
дущему указателю, который установлен на likes(mary,popcorn).
Переменная X опять становится свободной из-за неуспешного вычис-
ления подцели во время попытки сопоставления с pears. В точке, опреде-
ляемой указателем отката, Турбо-Пролог находит факт likes(mary,popcorn).
Указатель отката, отмеченный цифрой 4, устанавливается на следующее
утверждение для likes. Переменная X имеет значение popcorn, так что теперь
подцели эквивалентны
"Мэри любит кукурузные зерна и кукурузные зерна
фрукт красного цвета".
Подцель fruit(popcorn) не может быть доказана при помощи фактов и
правил, имеющихся в программе, так что подцель likes(mary,X) неус-
пешна. Переменная X освобождается, и подцель likes(mary,X) в правиле
likes(beth,X) имеет еще один шанс на
успех, так как был отмечен для отка-
та еще один факт, о том что любит Мэри. Внутренние унификационные под-
программы выполняют откат в точку 4.
Теперь подцель сопоставляется с likes(mary, apples), и X получает
значение apples. Выполняется попытка для следующей подцели ruit(apples).
Первое утверждение для fruit имеет объект pears. Объекты
не сопоставимы,
так что внутренние унификационные подпрограммы переходят к сле-
дующему факту fruit(apples), который сопоставим с подцелью.
Наконец, последняя подцель первого правила проверена. Снова дела-
ется попытка сопоставить ее с фактом для color. В этот момент подцель есть
color(apples, red). Начав с вершины списка фактов для color, внутренние
унификационные подпрограммы пытаются сопоставить эту подцель с фак-
тами color(pears, yellow), color(oranges, orange) и color(apples, red). Во вре-
мя этой последней попытки объект apples (присвоенный переменной X) со-
поставляется с объектом apples в факте, но последние объекты red и yellow
не сопоставимы, так что попытка неудачна. Последний факт, связанный
с
цветом это color(apples, red), который сопоставим с подцелью color(apples,
red).
С успешным сопоставлением последней подцели правило доказано.
Переменная X, получив значение apples, тем самым доказывает правую
часть. Все правило с переменной X, означенной объектом apples, c точки
зрения внутренних унификационных подпрограмм выглядит как
likes(beth, apples) :-
likes(
mary, apples),
fruit(apples),
color(apples, red).
Выдав сообщение X=apples, Турбо-Пролог показывает, что для цели
найдено по крайней мере одно решение.
Снова используется последняя подцель. Теперь co значением