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

Шумихин / Шумихин / Шумихин - лекция 3

.txt
Скачиваний:
12
Добавлен:
20.05.2015
Размер:
8.86 Кб
Скачать
ЛЕКЦИЯ 3
21.09.12

Пролог-программа состоит из набора фактов и набора правил. Этот набор фактов представляет собой некотороую теорию, из которой на базе механизма редукций строится логический вывод о том, является ли указанное утверждение следствием теории, т.е. будет ли оно справедливо на всех моделях теории. Базовый механизм -- механизм редукций.

ПРИМЕР
Факты:
z.
s.
t.
y.
v.
w.

Правила:
y & w -> x

Правила в Прологе -- импликации вроде написанной выше. Остальное -- факты. Правила будем писать так:
x:- y, w
Логическая связка "и" в Прологе -- запятая ","
"или" -- точка с запятой ";". Покамест запрещено. (!!!)

Итак, теория:
z.
s.
t.
y.
v.
w.
x:- y,w
y:- u,z
r:- z
f:- y,z
g:- r,s,t

Прямая цепочка рассуждений
Просматриваем все правила по порядку сверху вниз. Если правая часть правила истинна для данного набора фактов, то этот факт записывается в базе фактов. Так получаем все возможные факты.

Просмотрев теорию, к набору фактов добавляем:
1 шаг
y.
r.
2 шаг
x.
f.
g.
3 шаг
Никаких новых фактов не получим.

Т.о., y, r, x, f, g -- следствия из нашей теории.

Недостатки метода:
- Количество фактов растёт очень быстро (как правило, экспоненциально).
- По ходу дела получаем много фактов, которые нас не интересуют.

Обратная цепочка рассуждений
Объяснение на примере (см.выше):
Берём х, смотрим на набор фактов. Среди них х нет.
Смотрим на набор правил, причём выбираем только те, где в левой части стоит х. Для его истинности нужно, чтобы были истинны у и w. И т.д.

х
+ у w
u z +
+ +

В итоге все факты выполняются. Значит, х -- следствие теории.

Преимущества:
- Не строим лишних фактов, не просматриваем все правила теории.
- Дерево вывода просто строится алгоритмичесаки, процедура легко автоматизируется.

Так и работает Пролог-система.

Пример 2
x:- y,w
x:- s,t

Может быть несколько правил, в левой части которых фигурирует тот же самый предикат.

Если правил несколько и если мы не найдём решений, двигаясь по первому пути, то мы пойдём по второму.

х
^ ("или")
/ \
у w s t
...

Вначале строится такое дерево, потом осуществляется обход этого дерева, слева направо, снизу вверх. Если какая-либо из ветвей "или" доказана, то тогда остальные ветви "или" просто отбрасываются.

Все Пролог-системы имеют встроенный механизм трассировки. ЕГО СЛЕДУЕТ ВКЛЮЧАТЬ!!! Даже для простейших задач. Т.о. мы будем видеть, как строится подобное дерево, последовательность вызовов. (Единственный реальный механизм отладки программ в Прологе.)

В Прологе можно получить не одно решение задачи, а все.

ПРОЛОГ

Есть два типа данных: числа и символы.

Атом -- это есть строка символов, начинающаяся со строчной (маленькой) буквы или со знака "_", или заключённая в кавычки (одинарные или двойные -- в зависимости от версии Пролога).
Примеры:
катя, _Катя, "список отличников"

Числа и атомы могут образовывать некие структуры.

Структура -- это есть конструкция вида:
структура ::= имя_структуры(перечень параметров структуры)
Разделителем в перечне является запятая. Имя структуры -- атом.

Пример:
дата(22, сентябрь, 2012)

Количество элементов в перечне называется арностью структуры.
Элементом перечня структуры может быть структура, т.е. структуры могут быть составными.

Список -- конструкция вида:
[перечень элементов списка]
Элементы списка могут быть любыми, в т.ч. списки, структуры.

Отличия списка и структуры:
1. список не имеет имени, а структура имеет;
2. в списке может быть любое количество элементов.

Переменная
Начинается всегда с _БОЛЬШОЙ_ буквы.

Пример:
Катя, Х

Специальная переменная: _
Называется анонимной переменной (подробнее позже).

Лексический диапазон переменной: одно предложение. Это значает, что переменная имеет своё значение только в одном предложении. Значит, в разных предложениях одна и та же буква обозначает совершенно разные вещи (по смыслу, значению, содержанию, формату).

Диапазон жизни переменной: время обработки предложения, в котором она есть. Обработка предложения завершена -- переменная исчезает и никак не сохраняется в памяти.

Переменные могут быть:
1. свободными -- не имеют _никакого_ значения
2. связанными -- уже получили какое-то значение

Связывание переменных совершается через процедуру унификации:
- константа сопоставляется (унифицируется) с такой же константой;
- переменная унифицируется с любой константой (получает значение этой константы, изменить это значение никак нельзя);
- две переменные унифицируются друг с другом, но с момента связывания любые изменения одной из них автоматически приводят к точно таким же изменениям второй.

Текст программы может состоять из фактов и из правил. Факты не могут иметь свободных переменных.

Правила в Прологе имеют знакомую нам структуру:
A:-B,C,D
где А, B, C, D -- некие структуры. А называют заголовком, или целью, правила, а B, C, D -- подцелью.
___________________________________________________