менной Х; кроме того, вторые параметры согласованы. Поскольку
Х соответствует , Турбо Пролог требует, чтобы переменная
также была связана со значением john.
Теперь мы знаем, что наша подцель соответствует левой
части правила. Продолжение поиска определяется третьим основ-
ным принципом:
Если подцель соответствует левой части правила, то далее
следует удовлетворять правую часть этого правила. Правая
часть составляет новый набор подцелей.
Исходя из этого принципа, мы получаем следующее дерево
целей:
likes(X,wine) likes(X,books)
------------------ ------------------
likes(john,wine) likes(Z,books)
/ |
reads(Z) is_inquisitive(Z)
Дерево целей включает теперь подцели
reads(Z)
и
inquisitive(Z)
причем переменная Z имеет значение john. Теперь Турбо Пролог
будет искать факты, соответствующие обеим подцелям. Получаю-
щееся в результате окончательное дерево целей показано ниже:
likes(X,wine) likes(X,books)
------------------ ------------------
likes(john,wine) likes(Z,books)
/ |
reads(Z) is_inquisitive(Z)
-------- -----------------
reads(john) is_inquisitive(john)
Теперь мы знаем, что наша первоначальная цель удовлетво-
рена. Это вытекает из четвертого основного принципа:
Цель считается удовлетворенной, если для всех терминаль-
ных вершин (листьев) дерева целей найдены соответствующие
факты.
Турбо Пролог использует результаты процедуры поиска раз-
личными способами, и это зависит от того, каким образом такая
процедура была начата. Если цель - это подцель в правиле, то
Турбо Пролог пытается удовлетворить следующую подцель в том
же правиле. Если цель - это вопрос, исходящий от пользовате-
ля, то Турбо Пролог непосредственно отвечает:
X=john
1 solution
Как мы уже видели в главе 3, однажды удовлетворив цель,
Турбо Пролог осуществляет возврат в поиске альтернативных ре-
шений. Кроме того, он будет делать возврат, если анализ под-
цели закончился неудачно. Он будет пытаться заново удовлетво-
рить предыдущую подцель так, чтобы неудавшаяся подцель была
удовлетворена при новых значениях переменных.
Чтобы выполнить подцель, Турбо Пролог начинает поиск с
первого предложения для предиката. Здесь могут быть два исхо-
да.
1. Начало соответствующего предложения найдено. После
этого происходит следующее.
а) Если существует другое предложение, которое, быть мо-
жет, еще раз удовлетворит цель, то первое такое предложение
помечается указателем, соответствующим точке возврата.
б) Все свободные переменные в подцели которым соответст-
вуют значения в начальной части предложения, получают эти