Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Л.Р._Ш.И_2-6 / L2_Mechanizm

.doc
Скачиваний:
7
Добавлен:
20.02.2016
Размер:
44.03 Кб
Скачать

6

Лекция "Механизм работы ПРОЛОГа"

Изучение операций Пролога:

  • сопоставление с образцом;

  • связывание переменных;

  • откат и свободные переменные;

  • внешняя и внутренняя цель;

  • методы организации циклических процессов в Прологе.

Секция CLAUSES пролог-программы содержит предложения двух типов:

предложения-факты

man(jon).

likes(cat, milk).

предложения-правила

like(lynx, X):- likes(cat, X).

vather(X):- parent(X,_),man(X).

Аргументами предложений-фактов являются константы строковые (symbol) или числовые (number).

Аргументами предложений-правил могут быть константы и переменные.

ЦЕЛЬ (goal) это предложение, которое ПРОЛОГ должен доказать, то есть вывести ее из тех фактов предложений, которые имеются в разделе CLAUSES пролог-программы.

Цели бывают:

простые - составные;

константные - с переменными.

ПРОСТАЯ КОНСТАНТНАЯ ЦЕЛЬ

Пусть имеется набор фактов:

CLAUSES

man(bob).

man(jon).

man(jim).

GOAL

man(jon).

Требуется доказать, что Джон - мужчина. Метод решения прост - надо просмотреть все предикаты man(symbol) и сопоставить аргументы предложения-цели и предложения-факта. Если они совпадают - цель доказана. Пролог подтверждает YES, если такого факта нет, то NO. Но это не значит, что Джон не мужчина. Просто такого факта в базе знаний нет!

Операция сравнения цели с предложениями программы называется операцией сопоставления с образцом.

Сопоставление цели с образцом начинается сверху вниз, а сравнение параметров слева направо.

ПРОСТАЯ ЦЕЛЬ С ПЕРЕМЕННЫМИ

Пусть имеется набор фактов:

CLAUSES

likes(bob, football).

likes(jon, tennis).

likes(jim, tennis).

GOAL

likes(Who, tennis).

Кто любит теннис? Пролог начинает операцию сопоставления с образцом (сверху вниз), причем сопоставляются только константы цели и образца. Первым подходящим предложением является второе:

цель likes(Who, tennis).

образец likes(jon, tennis).

Далее Пролог делает операцию связывания свободной переменной Who с константой образца. Свободная переменная становится связанной переменной со значением jon.

Прологу удалось найти факт, не противоречащий цели, связав переменную Who. Цель доказана. Пролог выводит значение связанной переменной Who=jon. Операцию связывания называют также операцией унификации, а программы ее осуществляющие - программами унификации.

Программы унификации ищут все возможные решения, поэтому ответ будет содержать два решения (solutions):

Who=jon

Who=jim

2 Solutions

СОСТАВНАЯ КОНСТАНТНАЯ ЦЕЛЬ

CLAUSES

vather(jon, sui).

vather(bob, tom).

vather(bob, pat).

man(jon).

man(tom).

man(bob).

woman(sui).

woman(pat).

GOAL

vather(bob, pat),woman(pat).

Является ли Пат дочерью Боба?

Чтобы доказать составную цель, необходимо доказать все подцели слева направо. В данном случае 1 цель совпадает с 3 предложением, а вторая цель - с 8 предложением. То есть цель доказана.

СОСТАВНАЯ ЦЕЛЬ С ПЕРЕМЕННЫМИ

CLAUSES

vather(jon, sui).

vather(bob, tom).

vather(bob, pat).

man(jon).

man(tom).

man(bob).

woman(sui).

woman(pat).

GOAL

vather(bob, X),woman(X).

Есть ли у Боба дочь? Пролог начинает доказывать 1 цель. Образец vather(bob, X) удается сопоставить со вторым предложением vather(bob, tom). При этом свободная переменная Х связывается значением X=tom. Подцель доказана. Пролог переходит к доказательству второй подцели - woman(tom). Вторая цель не может быть доказана, так как такого факта нет. НЕУСПЕХ. Но решение то есть. Просто первое связывание оказалось неудачным.

Пролог освобождает связанную переменную и возвращается (откатывается) к доказательству первой подцели, так как еще есть предложения с которыми можно сопоставлять.

Второе сопоставление образца vather(bob, X) с предложением vather(bob, pat) связывает X значением pat. Теперь вторая цель доказывается. Пролог нашел решение:

X=pat

1 Solution

Рассмотрим дерево решений. При доказательстве 1 подцели возможны три варианта, а при доказательстве 2-ой два варианта. Таким образом, возникает шесть возможных вариантов решения.

1 цель

vather(jon, sui) .vather(bob, tom) .vather(bob, pat).

sui pat sui pat sui pat

Пролог обходит дерево решений сверху вниз, слева направо.

СОПОСТАВЛЕНИЕ С ПРЕДЛОЖЕНИЕМ ПРАВИЛОМ

Предложение правило состоит из двух частей: головы и хвоста (заголовка и тела). В этом случае цель сопоставляется с заголовком правила. Имеющиеся свободные переменные связываются с соответствующими значениями. Если правило, в свою очередь содержит в заголовке переменные, то свободные переменные цели связываются со свободными переменными заголовка без значения. Затем Пролог переходит к доказательству подцелей правила.

Пример 1.

CLAUSES

likes(bob, nut). Боб любит орехи

likes(jim, apple). Джим любит яблоки

likes(tom, X):-likes(jim,X). Том любит то, что любит Джим

GOAL

likes(tom,Y).

Что любит Том? Здесь подходит 3-ий предикат. Но он является правилом. Поэтому переменная Y связывается с переменной X правила. Затем Пролог начнет доказывать подцель likes(jim,Y). Такой факт находится Y=apple. Тогда X=apple. Том любит яблоки.

Пример 2

тип(копытное, животное).

тип(рыба, животное).

вид(зебра, копытное).

вид(сельдь, рыба).

вид(акула, рыба).

живет(зебра, земля).

живет(лягушка, земля).

живет(лягушка, вода).

живет(акула, вода).

может_плавать(Y):-

тип(Х, животное),

вид(Y, X),

живет(Y, вода).

GOAL

может_плавать(Who),

write("может плавать", Who).

Решение

  1. Y=Who . Докажем три подцели

тип(X,животное), вид(Who, X), живет(Who, вода)

Первая подцель X=копытное

Вторая подцель вид(Who,копытное) Who=зебра

Третья цель живет(зебра, вода) не разрешается

Откат

Первая подцель X=рыба

Вторая подцель вид(Who,рыба) Who=сельдь

Третья цель живет(сельдь, вода) опять не разрешается

Откат

Вторая подцель вид(Who,рыба) Who=акула

Третья цель живет(акула, вода) разрешается.

Решение: может плавать акула.

Соседние файлы в папке Л.Р._Ш.И_2-6