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

Лабораторная работа № 4

Программирование интеллектуальных систем на языке Пролог

Работа с простейшими программами в системе Турбо-Пролог

  1. Введение

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

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

- clauses -секцию определения предикатов в виде набора фактов и правил.

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

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

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

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

Каждая программа на Прологе представляет собой текстовый файл, который для запуска из системы Турбо-Пролог должен иметь расширение .PRO.

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

include "dos_file_name"

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

Включаемые файлы могут быть использованы только в естественных границах программы. Таким образом, ключевое слово include может появиться только там, где допускается одно из ключевых слов domains, predicates, clauses или goal.

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

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

  1. Загрузка системы Турбо-Пролог, ввод и запуск программ

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

1. ознакомьтесь с опциями главного меню и изучите их назначение;

2. установите режим компиляции в память компьютера;

3. сконфигурируйте, если необходимо, размеры и цветовые палитры всех окон;

4. определите пути доступа к файлам, установив нужные для вас каталоги;

5. выполненные установки запишите в файл конфигурации.

Войдите в режим редактирования системы Турбо-Пролог, воспользовавшись командой "Ред" главного меню, и введите программу 1 из раздела 3 вводной части. Закончив ввод, выйдите из редактора в главное меню системы, нажав клавишу "Esc".

Запустите программу на выполнение, выбрав команду "Вып" главного меню. В данной программе нет секции goal, т.е. в программе отсутствует внутренняя цель, определяющая решение конкретной задачи. Такие программы могут использоваться только в среде системы Турбо-Пролога. Поэтому, после ее запуска на выполнение системой активизируется окно "Диалог" и появляется приглашение на ввод внешней цели (GOAL:)

  1. Работа с Пролог-программами в режиме диалога

Внешние цели - это запросы к программе, формируемые пользователем в окне "Диалог". Введите запрос

GOAL: likes(Who,"пиво").

Объясните: что обозначает данный запрос, к каким элементам языка Турбо-Пролога следует отнести такие объекты запроса, как "пиво". Who и likes.

Активизируйте введенный Вами запрос. Для этого надо после окончания его набора нажать клавишу "Enter". До нажатия "Enter" запрос можно редактировать. В ответ на Ваш запрос в окне "Диалог" должны появиться сообщения.

Who=Петр Who=Иван 2 GOAL:

Объясните полученный результат и смысловое назначение выводимых в окне "Диалог" сообщений.

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

GOAL: likes(Who,"пиво","Марья").

Запустите ее на выполнение и объясните полученный результат.

Аналогичные действия проделайте по вводу и запуску запроса вида:

GOAL: likes(Иван, Х)

Объясните полученный результат, внесите изменения в запрос, чтобы он удовлетворял синтаксису языка Турбо-Пролог и повторно запустите запрос на выполнение.

Измените описание предиката так, чтобы было ясно, между какими объектами реального мира отношение likes устанавливается. В частности, для рассматриваемого примера, отношение likes определяется между некоторым лицом (person) и некоторым другим лицом или вещью (thing). Для учета введенного дополнения, измените в секции predicates описание предиката на новое

likes(person,thing)

и запустите программу на выполнение.

При этом система выдаст сообщение об ошибке и в окне редактирования курсором будет отмечено то место, где транслятор обнаружил ошибку. Текст сообщения об ошибке "Необъявленный домен или ошибка в написании" дает подсказку о том, что перейдя к использованию нестандартных (т.е. определенных пользователем) доменов мы забыли объявить их типы.

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

domains

person = string thing = string

или

domains

person,thing = string

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