В результате резолюции получается новое
В результате резолюции получается новое целевое предложение и метод резолюции применяется к нему и к другому предложению программы. Процесс продолжается до тех пор, пока не будут согласованы с фактами все возникшие при резолюции подцели, табл. 3.6.
Таблица 3.6
К процессу выполнения программы на Прологе
Номер шага резолюции
|
|
Целевое предложение
|
Исходное предложение
|
Резольвента
|
1
|
|
?-а.
|
a:-b,c,d.
|
?-b,c,d.
|
2
|
|
?-b,c,d.
|
b:-c,f.
|
?-e,f,c,d.
|
3
|
|
|
?-е,f,с,d
|
e. ?-f,c,d.
|
4
|
|
|
?-f,c,d.
|
f. ?-c.d.
|
5
|
|
|
?-c,d.
|
c. ?-d.
|
6
|
|
|
?-d.
|
d. Пустая
|
При выполнении логического вывода, если необходимо, происходит конкретизация переменных. Рассмотрим пример.
Программа 113
любит(юрий,музыку).
любит(сергей,спорт).
любит(А,книги):-читатель(А),любопытный(А).
любит(сергей,книги).
любит(сергей,кино).
читатель(юрий).
любопытный(юрий).
?- любит(X,музыку), любит(X,книги).
Двойной запрос в этой программе может быть представлен целевым деревом:
Вначале, просматривая программу сверху вниз. Пролог находит первое предложение, соответствующее первой подцели запроса:
Переменная Х конкретизируется значением «юрий». Начинается согласование 2-й подцели запроса с условием Х=юрий. 1-е и 2-е предложения программы не соответствуют подцели. В 3-ем предложении:
любит(А,книги):-читатель(А), любопытный(А).
аргумент А заголовка есть переменная, поэтому она может соответствовать
X, т.е. получает значение А=юрин; вторые аргументы совпадают. Теперь тело правила образует новое множество целей для согласования. Получаем целевое дерево:
Затем Пролог будет искать факты, соответствующие новым подцелям. Последнее результирующее дерево:
Рассмотрим еще один пример.
Программа 114
любит(оля,чтение).
любит(света,бадминтон).
любит(для,бадминтон).
любит(лена,плавание).
Содержание Назад Вперед