Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры good.doc
Скачиваний:
10
Добавлен:
25.09.2019
Размер:
495.62 Кб
Скачать

9. Вычислительная модель Пролога. Факты, запросы, переменные, домены и правила.

Вычислительная модель Пролога

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

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

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

Вычисление цели G относительно программы P, написанной на Прологе, состоит в порождении всех решений цели G относительно программы Р. В терминах логического программирования вычисление цели G в Прологе является полным обходом в глубину конкретного дерева поиска цели G, в котором всегда выбирается самая левая цель.

Рассмотрим вопрос сын(Х, аран)? относительно программы 1.2, упрощенной библейской базы данных, повторно записанной в верхней части рис. 6.1. Вычисление приведено в основной части рис. 6.1. Оно соответствует обходу в глубину первого дерева поиска на рис. 5.2. Данное вычисле­ние является расширением первого протокола на рис. 4.4, так как поиск произво­дится во всем дереве поиска.

Список обозначений, использовавшихся ранее в протоколах, следует расширить для описания отказов и возвратов. Символ f после цели означает, что цель недоказуема, т. е. в программе отсутствует предложение, заголовок которого унифицируем с целью. Встретив недоказуемую цель, вычисление переходит к цели, указанной механизмом возврата. Соответствующая цель уже появлялась в качестве предыдущей цели в протоколе на том же самом уровне и может быть идентифици­рована именами переменной. В соответствии с правилами Edinburgh-Пролога символ «;» после решения означает, что вычисление продолжается для поиска

Факты характеризуют известные отношения между объектами, заданные в виде предикатов. При этом все объекты и отношения пишутся с маленькой буквы.

Например:

Джону нравится Мэри.

like(john, mary).

Следует соблюдать принятый порядок перечисления аргументов предикатов.

Например:

1) Джон и Мэри играют в бадминтон.

play(john, mary, badminton).

2) Джон дает книгу Мэри.

gives(john, book, mary).

Данные предикаты имеют различные порядки аргументов.

Набор фактов в Прологе – это база фактов (БФ).

Запросы.Запросы – это целевые утверждения в форме предикатов, которые требуется подтвердить или опровергнуть в результате поиска по БФ.

Например:

1) ? – like(john, mary).

Yes

2) ? – like(john, ann).

No

Во втором случае ответ No, т.к. Пролог не нашел соответствующего факта в БФ, хотя в действительности ничего не известно о том, нравится ли Джону Анна.

Примечание: Ответ No означает, что Пролог не может доказать истинность цели, однако ответ No не тождественен значению False для логической переменной или высказывания.

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

Каждый объект, начинающийся с большой буквы, воспринимается как переменная, причем длина имени переменной может быть большой.

Например:

  1. Что нравится Джону?

  2. Есть ли что-либо, что нравится Джону?

like(john, X)

X = Is there

Пролог различает два типа переменных:

  • свободные (free);

  • связанные (instantiated).

Если переменная используется в предикате впервые, то ее значение не определено, и она считается свободной. Пролог ищет в БФ факт, соответствующий запросу и проводит унификацию, т.е. сопоставление свободной переменной какого-либо объекта, определенного из факта. Если такой факт найден, то переменная становится связанной, в том числе для всех последующих предикатов, в которых она встречается. В процессе унификации Пролог просматривает БФ сверху вниз в порядке следования фактов и маркирует первый найденный факт, соответствующий запросу.

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

Правила.Правила – это обобщенные описания множества объектов и их отношений.

Правила используются для указания зависимостей (типа 1:М, М:М) между фактами, где множество допустимых аргументов задается свободными переменными. При этом правила можно представить в виде дерева поиска.

like(john, X) :- female(X), like(X, wine), !, … .

Это правило может быть представлено следующей структурой:

Составные цели в правилах образуются объединением нескольких предикатов подцели с помощью логических операторов and, or, not. Пролог последовательно старается подтвердить или опровергнуть составные подцели в порядке их указания. При этом каждая подцель маркируется своим маркером в процессе унификации. Пролог просматривает всю БФ для каждой подцели. Если 1-ая подцель подтверждена (маркер установлен), а 2-ая подцель – нет, то Пролог пытается переопределить 1-ую подцель.

Процесс поиска, в котором Пролог последовательно подтверждает или опровергает составные цели, называется обратным отслеживанием. Backtracking

% facts

m1.1  like(mary, food). %f1

m1.2  like(mary, wine). %f2

m2.1  like(john, wine). %f3

like(john, mary). %f3

? - like(mary, X), like(john, X).

Алгоритм поиска:

Шаг 1:

? - like(mary, X). X = food

Пролог устанавливает маркер m1.1.

Шаг 2:

? - like(john, food). false

Шаг 3:

Откат назад: Xfree ? - like(mary, X).

Поиск начинается от маркера m1.1. X = wine

Предыдущий маркер стирается и устанавливается новый – m1.2.

Шаг 4:

? - like(john, wine). Yes

Устанавливается новый маркер – m2.1.

Шаг 5 X = wine

Примечание: Если нужно найти другие варианты ответов, то должен использоваться предикат fail, который выполняет откат назад и повторный поиск, начиная с маркеров m1.2 и m2.1 до тех пор, пока не будет просмотрена вся БФ для каждого из составных предикатов.

Домены

Домены позволяют задавать разные имена различным видам данных, которые, в противном случае, будут выглядеть абсолютно одинаково. В Пролог-программах объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные вами специальные домены.