Домены позволяют задавать разные имена различным видам данных.
Например, предложение «Иван – мужчина, которому 45 лет» можно объявить следующим предикатом: person(symbol, symbol, integer) без объявления доменов в их разделе.
Однако такое объявление недостаточно понятно. Если использовать домены, то предикат станет гораздо более «говорящим»:
domains
imya, pol = symbol
vozrast = integer
predicates
person(imya, pol, vozrast)
Одно из преимуществ объявления собственных доменов – это то, что компилятор может отслеживать ошибки типов:
rovesnik(X, Y) :- person(X, Pol, Let), person(Pol, Y, Let)
Вывод:
если переменная в предложении используется более чем в одном предикате, она должна быть одинаково объявлена в каждом их них.
Стандартные домены
Домен
Описание
Значение
short
короткое, знаковое, количественное
-32 768 .. 32 767
ushort
короткое, беззнаковое, количественное
0 .. 65 535
long
длинное, знаковое, количественное
-2 млрд. .. 2 млрд.
ulong
длинное, беззнаковое, количественное
0 .. 4 млрд.
integer
знаковое, количественное
или -32 768 .. 32 767
или -2 млрд. .. 2 млрд.
unsigned
беззнаковое, количественное
или 0 .. 65 535
или 0 .. 4 млрд.
byte
0 .. 255
word
0 .. 65 535
dword
0 .. 4 млрд.
char
символ, заключенный в апострофы
real
число с плавающей десятичной точкой (эквивалентен типу double в C) в интервале:
10-307 .. 10308
string
1) последовательность символов, заключенных в кавычки
2) последовательность букв, цифр и символов подчеркивания, начинающаяся со строчной буквы
symbol
то же, что и string
Раздел целей
Раздел целей аналогичен телу правила: это просто список подцелей.
Цель отличается от правила следующими признаками:
1) за ключевым словом GOAL не следует знак :-
2) при запуске программы VP автоматически выполняет цель.