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

3. Основы Турбо-Пролога

Турбо-Пролог – это одна из популярных систем программирования, разработанных на базе языка Пролог. Она создана фирмой Borland International. Язык системы представляет подмножество стандартного Пролога, дополненное большим числом встроенных предикатов. Особенностями системы являются многооконный интерфейс, интерактивная система ввода-вывода, наличие компилятора программ на исходном языке.

Турбо-Пролог успешно используется для разработки средств искусственного интеллекта, таких как экспертные системы, системы общения с компьютером на естественном языке и другие, а также для создания игр и головоломок. Формат настоящей книги не позволяет полностью изложить все средства Турбо-Пролога и методы программирования на нем. Мы сможем рассмотреть лишь основные особенности системы и привести некоторые примеры ее использования. Детальному описанию Турбо-Пролога посвящена книга […].

3.1. Интерфейс пользователя

После запуска системы на экране монитора высвечивается ее главное меню, которое выглядит так:

Рис. 1

Рассмотрим сначала расположение окон. Слева вверху расположено окно редактора, в котором размещается тестируемая или выполняемая программа (без вопроса). Она может быть загружена из файла или составлена с помощью встроенного редактора. В окне сообщений (“Message”) помещается информация о действиях, выполненных системой, например, загрузка базы знаний из файла (как на рис. 1), компиляция, выполнение программы, диагностика ошибок и пр. Диалоговое окно (“Dialog”) используется для помещения вопросов и результатов выполнения программы. Наконец, в окне трассировки (“Trace”) при использовании специальной директивы помещается трассировка, т.е. информация о результатах каждого шага выполнения программы. При необходимости редактирования больших программ окно базы знаний может быть расширено за счет других окон с помощью функциональной клавиши F5 и тогда главное меню примет вид:

Рис 2

Повторное нажатие клавиши F5 вернет меню у первоначальному виду. Аналогично можно расширить и диалоговое окно.

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

3.2. Структура программ на Турбо-Прологе

В противоположность стандартному Прологу, в котором программа – это совокупность базы знаний и вопроса, в Турбо-Прологе под программой естественнее понимать базу знаний и сопутствующую информацию, а вопросы рассматривать как начальные данные, необходимые для запуска программы на выполнение. Программа на Турбо-Прологе состоит из пяти разделов: раздела описания доменов, раздела базы данных, раздела описания предикатов, раздела внутренней цели и раздела базы знаний. Некоторые из этих разделов: описания доменов, базы данных, внутренней цели могут быть опущены. Кроме того, в любом месте программы можно помещать комментарий, который обрамляется символами /* и */. В настоящей книге мы не будем рассматривать программы, которые содержат внутреннюю цель, и поэтому опустим соответствующий раздел. С учетом этого замечания структура программы может быть представлена следующим образом:

го условия нет). Это ограничение введено с целью оптимизировать работу со списками. Кроме того, не применяется представление списков в виде соединений.

Раздел Database – описание динамической базы данных

Будет рассмотрен ниже.

Раздел Predicates – описание предикатов

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

предок(string, string), diff(formula, symbol, formula), belong(char, list), conc(list, list, list).

В разделе Domains должны быть описаны типы констант formula и list.

Раздел Clauses – база знаний

/* */

/* комментарий */

/* */

Domains

<описание нестандартных типов констант>

Database

<описание динамической базы данных>

Predicates

<описание предикатов>

Clauses

<база знаний>

/* */

/* комментарий */

/* */

Рис. 3

Вопросы, которые в Турбо-Прологе называются внешними целями, вводятся пользователями в окно “Goal” главного меню и будут рассмотрены ниже. Пока отметим, что компиляция программы (вернее той ее части, которая представлена на рис. 3) выполняется до задания вопроса и, таким образом, при последовательном задании нескольких вопросов перекомпиляция не требуется.

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

Раздел Domains – описание нестандартных типов констант

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

тип констант

Имя

домен

Примеры

Символы

Char

любые символы

′a′, ′A′, ′1′, ′&′, ′\13′

целые числа

Integer

в диапазоне от -32768 до 32767

325, -1450, -1, +56, 32766

вещественные числа

Real

по модулю в диапазоне от 1E-307 до 1E306

3425, -24, 124.31, 12.1E-2, 0.234E10, 14.23E+3

Строки

String

последовательность любых символов в кавычках

John, Андрей Сидоров, 12.234, (a+b)*c

символические имена

Symbol

Строки либо последовательность букв, цифр и знаков подчеркивания, начинающаяся со строчной буквы

John, 12.234, pattern, day_1, pay_check_125

Файлы

File

Имя файла

new.txt, matrix.doc, A.dba

Нестандартные типы констант, которые используются в программе, должны быть описаны в разделе “Domains”. Каждый нестандартный тип определяется через стандартные или другие описанные в данной программе нестандартные типы. Пусть, например, нам требуется ввести типы “owner”, и “thing”. В первый из них включим владельцев некоторым имуществом, а во второй – имущество (вещи), принадлежащие владельцам. Если и те и другие представлены в базе знаний строками, то в разделе “Domains” они могут быть описаны так:

Owner = string

thing = string-

или

owner = string

thing = owner

или

owner, thing = string

Важно понимать, что хотя константы обоих типов представлены строками, их домены не только не совпадают, но, исходя из смысла, даже не пересекаются. Если, например, база знаний содержит двухместный предикат «владеть» (“own”), то естественно считать, что его первый терм означает владельца, а второй – вещь, которой он владеет. Утверждение «Иван имеет машину» может быть представлен фактом own(“Иван”, “машина”), откуда следует, что константа “Иван” входит в домен owner, а константа “машина” – в thing.

Структуры также описываются в разделе Domains. Например, структура, представляющая книги библиотеки (см. п. 2.1), может быть описана следующим образом:

library = book(author, title, publisher, year)

author, title, publisher = string

year = integer

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

employee = string

list_of_employee = employee*

При этом данные строки можно поменять местами.

Заметим, что в Турбо-Прологе понятие списка уже, чем в стандартном языке. В Турбо-Прологе требуется, чтобы элементы списка являлись константами одного и того же типа (в стандарте этого условия нет). Это ограничение введено с целью оптимизировать работу со списками. Кроме того, не применяется представление списков в виде соединений.

Раздел Database – описание динамической базы данных

В данном курсе не рассматривается.

Раздел Predicates – описание предикатов

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

предок(string, string), diff(formula, symbol, formula), belong(char, list), conc(list, list, list).

В разделе Domains должны быть описаны типы констант formula и list.

Раздел Clauses – база знаний

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

Вопросы

Как уже упоминалось, вопросы пользователей размещаются в окне Dialog. После запуска программы на выполнение (путем щелчка по кнопке Run в строке меню) в окне Dialog появляется слово Goal с двоеточием и мерцающим курсором. Это свидетельствует о готовности системы выполнить программу, для чего в окно Dialog нужно ввести вопрос. После ввода запуск программы производится нажатием клавиши Enter.

Результаты выполнения программы также размещаются в окне Dialog, после чего система приглашает пользователя ввести следующий вопрос. На рис. 3 показано главное меню после обработки двух вопросов пользователя.

Рис. 3

Заметим, что в окно Dialog могут помещаться данные, выводимые встроенным предикатом “write”.