Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Печень О.А / Тема 2 / ЛР 2 4 - Prolog задание 3.doc
Скачиваний:
24
Добавлен:
31.03.2015
Размер:
86.02 Кб
Скачать

Лабораторная работа № 6 Программирование интеллектуальных систем на языке Пролог Управление ходом выполнения программ в системе Турбо-Пролог (1 часть)

  1. Работа системы Турбо-Пролог при выполнении запросов

Запрос к системе - это всегда последовательность, состоящая из одной или нескольких целей. Для ответа на запрос система пытается достичь всех целей, т.е. показать, что утверждения, содержащиеся в запросе, истинны в предположении, что все отношения программы истинны. Другими словами, достичь цели - это показать, что она логически следует из фактов и правил программы, а если в запросе есть переменные, то еще и конкретизировать их, т.е. найти те конкретные объекты, которые, будучи подставленные вместо переменных, обеспечат достижение цели.

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

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

- совпадение у них имени предиката;

- совпадение количества аргументов предиката;

- возможность унификации всех аргументов предиката (правила унификации термов приведены ниже).

Если предложение, унифицирующееся с запросом, будет обнаружено, то оно начинает обрабатываться:

- если тело предложения является пустым (т.е. это факт), то запрос сразу оказывается успешным, переменные запроса конкретизируются объектами факта, и это решение помечается указателем возврата.

- если тело предложения содержит подцели, то, последовательно слепа направо, каждая из них обрабатывается точно так же, как исходный запрос.

Если система в тексте программы не находит предложения, унифицирующегося с запросом, то она:

- возвратится к последней успешно доказанной подцели;

- ликвидирует конкретизацию всех переменных, явившуюся результатом успешной обработки этой подцели, т.е. делает переменные свободными;

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

Такая процедура обработки запроса получила название поиск с возвратом. Применяя ее, при успешном выполнении запроса система выдает:

- либо значения всех переменных, входящих в состав запроса, которые были конкретизированы в результате обработки;

- либо слова да или нет, если переменные в запросе отсутствовали.

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

  1. Унификация термов

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

  1. Свободная переменная унифицируется с константой или структурой. В результате этого переменная становится конкретизированной, т.е. принимает значение этой константы или структуры.

Goal: Х = john Х = john

  1. Переменная унифицируется с переменной, при этом обе они становятся одной и той же переменной.

Goal: X=Y Х=_1 Y=_1

  1. Анонимная переменная унифицируется с чем угодно.

? _ = john

  1. Константа может быть унифицирована с другой константой, если они идентичны или со свободной переменной соответствующего типа.

Goal: "джон" = "джон" True

  1. Структура унифицируется с другой структурой при условии, что их функторы одинаковы, а аргументы могут попарно унифицироваться.

? father(X) = father(john) X = john

Для того, чтобы познакомиться с процессом унификации различных классов объектов Пролога, рассмотрим выполнение программой 7 нескольких запросов.

/* Программа 7 */

domains

title , author = symbol pages = integer publication = book(title , pages)

predicates

written_by(author,publication) long_novel(publication)

clauses

written_by("И.Бpaтко", book("Программирование на языке Пролог",5б0)). written_by("Ц.Ин,Д.Соломон" ,book( "Использование Турбо-Пролога",608)). long_novel(book(Title,Lcngth)) :- written_by( _ , book(Title , Length)), Length > 600.

Рассмотрим запрос вида: written_by(X,Y) . При решении задачи система должна поочередно согласовать цель с предложениями программы, пытаясь достичь соответствия между параметрами Х и Y с одной стороны и параметрами предложений программы с другой, выполняя операцию унификации.

Так как в данном запросе переменные Х и Y являются свободными и могут согласовываться с любой константой, то самое первое предложение для предиката written_by дает желаемое соответствие:

written_by( Х , Y )