Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функционально-логическое программирование Prolog, LISP.doc
Скачиваний:
73
Добавлен:
02.05.2014
Размер:
389.63 Кб
Скачать

3. Структура пролог-программы

Программа на Турбо Прологе состоит из следующих семи разделов:

директивы компилятора;

CONSTANTS - раздел описания констант;

DOMAINS - раздел описания доменов;

DATABASE - раздел описания предикатов внутренней базы данных;

PREDICATES - раздел описания предикатов;

CLAUSES - раздел описания предложений;

GOAL - раздел описания внутренней цели.

В программе может быть несколько разделов описаний DOMAINS, PREDICATES, DATABASE и CLAUSES.

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

Рассмотрим разделы немного подробнее.

ДИРЕКТИВЫ КОМПИЛЯТОРА (Options -Compiler Directives).

TRACE применяется при отладке программы для трассирования. Если после слова trace указаны имена предикатов через запятую, то трассировка идет только по этим предикатам.

NOWARNINGS используется для подавления предупреждения системы о том, что какая-то переменная встречается в предложении только один раз.

INCLUDE при компиляции в исходный текст можно вставить содержимое некоторого файла.

РАЗДЕЛ ОПИСАНИЯ КОНСТАНТ (<имя константы>=<значение>).

Каждое определение константы должно размещаться в отдельной строке.

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

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

Раздел описания доменов (типов).

<имя домена>=<определение домена>.

Integer, real, char, string, symbol, file.

В разделе описания доменов объявляются любые нестандартные домены.

Из доменов можно конструировать структуры:

point = p(integer, integer)

Каждая компонента структуры в свою очередь может быть структурой:

triangle = tr(point, point, point).

В описание структуры могут входить альтернативы, разделенные символом ";" или ключевым словом "or". Структура, описывающую точку и на плоскости, и в пространстве:

point = p(integer, integer);p(integer, integer, integer).

Список целых чисел описывается так:

list_of_integer=integer*

Раздел описания предикатов внутренней базы данных

DATABASE [ — <имя базы данных>]

<имя предиката>(<имя домена первого аргумента>,...,

< имя домена n-го аргумента>)

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

В традиционных языках программирования подобными разделами являются разделы описания заголовков процедур и функций. Описание n-местного предиката имеет следующий вид:

Домены аргументов должны быть либо стандартными, либо объявленными в разделе описания доменов.

mother(string,string)

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

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