Информатика -продвинутый курс


АЛГОРИТМ ВЫПОЛНЕНИЯ ПРОГРАММ НА ПРОЛОГЕ - часть 2


В результате резолюции получается новое целевое предложение и метод резолюции применяется к нему и к другому предложению программы. Процесс продолжается до тех пор, пока не будут согласованы с фактами все возникшие при резолюции подцели, табл. 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

любит(оля,чтение).

любит(света,бадминтон).

любит(для,бадминтон).

любит(лена,плавание).




Начало  Назад  Вперед



Книжный магазин