Логическое программирование на языке Visual Prolog. Солдатова О.П - 23 стр.

UptoLike

23
повернуть направо, после чего опять следует повернуть налево и так далее.
Унификация выполняется слева направо, как и поиск пути в лабиринте.
Некоторые подцели при унификации с некоторыми фактами или
правилами могут оказаться неуспешными, поэтому Прологу требуется
способ запоминания точек отката, в которых он может продолжить
альтернативные поиски решения. Прежде чем
реализовать один из
возможных путей вычисления подцели, Пролог фактически помещает в
программу указатель, который определяет точку, в которую может быть
выполнен возврат, если текущая попытка поиска цели будет неудачной.
Если некоторая подцель оказывается неуспешной, то Пролог
возвращается влево к ближайшей точке возврата. С этой точки Пролог
начинает попытку найти другое
решение для неуспешной цели. До тех пор,
пока следующая цель на данном уровне не будет успешной, Пролог будет
повторять возврат к ближайшей точке возврата. Эти попытки выполняются
внутренними подпрограммами унификации и механизмом возврата.
Замечание: единственным способом освободить переменную,
связанную в предложении является откат при поиске с возвратом.
Алгоритм вычисления целичастный
случай правила резолюции
применительно к дизъюнктам Хорна. Вопрос Q является правилом без
заголовка, аналогом выражения
¬
Q. Пусть D база данных (множество
дизъюнктов). На вопрос Q, следует найти такую подстановку
σ
, для которой
множество
σ
[D
(
¬
Q)] невыполнимо. Стратегия выбора очередной пары
дизъюнктов для резолюции здесь очень проста: подцели и предложения
просматриваются в текстуальном порядке.
Пример 18: пусть есть БД семья:
1. мать( мария, анна).
2. мать(мария, юлия).
3. мать( анна, петр).
4. отец( иван, анна).
5. отец( иван, юлия).
6. дед (X, Y): - отец(X, Z), мать(Z, Y).
7. дед (X, Y): - отец
(X, Z), отец(Z, Y).
8. бабка (X, Y): - мать(X, Z), мать(Z, Y).
9. бабка (X, Y): - мать(X, Z), отец(Z, Y).
Зададим сложную цель:
Q1, Q2 = отец(X, Y), мать(мария, Y).
Подцель Q1= отец(X,Y) соответствует четвертому предложению БД
:отец (иван,анна). Это дает подстановку
σ
1
={X=иван,Y=анна}. Затем найденная подстановка применяется к
σ
1
[Q2]=
мать(мария, анна). Этой подцели соответствует 1 предложение БД, что
дает пустую подцель по правилу резолюции, следовательно ответ найден:
X= иван, Y= анна.
Для получения нового ответа в БД ищется новая унификация для
σ
1
[Q
2
]. Так как в БД нет соответствующего предложения, то вычисления