Раздел описания доменов является аналогом раздела описания типов в обычных императивных языках программирования и начинается с ключевого слова DOMAINS.
В Турбо Прологе имеются стандартные домены, которые не нужно указывать в разделе описания доменов. Основные стандартные домены - это:
integer - целое число (из промежутка -32768...32767);
real - действительное число (лежащее между ±1e-307...±1e308);
char - символ, заключенный в одиночные апострофы;
string - последовательность символов, заключенная в двойные кавычки;
symbol - символическая константа (начинающаяся со строчной буквы последовательность букв латинского алфавита, цифр и знаков подчеркивания или последовательность любых символов, заключенная в кавычки). Этот домен соответствует понятию атома, с которым мы познакомились во второй лекции;
file - файл (подробному изучению файлов будет посвящена лекция 12).
В разделе описания доменов объявляются любые нестандартные домены, используемые в качестве аргументов предикатов.
Объявление домена имеет следующий вид:
<имя домена>=<определение домена>
или
file=<имя файлового домена1>;...;<имя файлового доменаN>
Удобно использовать описание доменов для сокращения имен стандартных доменов. Например, чтобы не писать каждый раз integer, можно написать следующее:
DOMAINS
i=integer
и далее использовать вместо ключевого слова integer односимвольное обозначение i.
Из доменов можно конструировать составные или структурные домены (структуры). Структура описывается следующим образом:
<имя структуры>=<имя функтора>(<имя домена первой
компоненты>,...,<имя домена последней компоненты>)
[;<имя функтора>(...)]*
Каждая компонента структуры в свою очередь может быть структурой. Например, структура, описывающая точку на плоскости и имеющая две компоненты (координаты точки)
point = p(integer, integer)
может входить в качестве компоненты в более сложную структуру, описывающую треугольник:
triangle = tr(point, point, point)
В описание структуры могут входить альтернативы, разделенные символом ";" или ключевым словом "or".
Так, структуру, описывающую точку и на плоскости, и в пространстве, можно задать следующим образом:
point = p(integer, integer);p(integer, integer, integer).
Описание файлового домена имеет вид:
file = <символическое имя файла 1>;...;
<символическое имя файла N>
Для представления данных в Турбо Прологе, в отличие от стандартных алгоритмических языков программирования, используются не массивы, а списки. Подробнее списки будут рассмотрены в следующей лекции, а пока заметим, что списковый домен задается следующим образом:
<имя спискового домена>=<имя домена элементов списка>*
Например, список целых чисел описывается так:
list_of_integer=integer*
Раздел описания предикатов внутренней базы данных
Работа с внутренними (динамическими) базами данных в Прологе будет рассмотрена позже. Начинается раздел описания предикатов внутренней базы данных с зарезервированного слова DATABASE и описываются в нем те предикаты, которые можно в процессе выполнения программы добавлять во внутреннюю базу данных или удалять оттуда. Описываются предикаты базы данных аналогично предикатам в разделе описания предикатов PREDICATES, который мы сейчас рассмотрим.