Учебное пособие: Язык логического программирования Visual Prolog

Основные стандартные домены перечислены в табл. 1.

Таблица 1. Основные стандартные домены

Домен Описание Реализация
short Короткое, знаковое, количественное Все платформы 16 бит (-32 768—32 767)
ushort Короткое, беззнаковое, количественное Все платформы 16 бит (0—65 535)
long Длинное, знаковое, количественное Все платформы 32 бит (-2 147 483 648-2 147 483 647)
ulong Длинное, беззнаковое, количественное Все платформы 32 бит (0-4 294 967 295)
integer Знаковое, количественное, имеет платформо-зависимый Платформы 1 6 бит (-32 768-32 767)
размер Платформы 32 бит (-2 147 483 648-2 147 483 647)
unsigned Беззнаковое, количественное, имеет платформо-зависимый размер Платформы 16 бит (0—65 535) Платформы 32 бит (0-4 294 967 295)
byte Все платформы 8 бит (0— 55)
word Все платформы 16 бит (0—65 535)
dword Все платформы 32 бит (0—4 294 967 295)

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

Домены типов byte, word и dword наиболее удобны при работе с машинными числами. В основном используются типы integer и unsigned, а также short и long (и их беззнаковые аналоги) для более специализированных приложений.

В объявлениях доменов ключевые слова signed и unsigned могут использоваться вместе со стандартными доменами типов byte, word и dword для построения новых базовых доменов. Так:

domains

i8 = signedbyte

создает новый базовый домен в диапазоне от -128 до +127.

Другие базовые домены показаны в табл. 2[1] .

Таблица 2. Основные стандартные домены

Домен Описание и реализация
char Символ, реализуемый как беззнаковый byte. Синтаксически это символ, заключенный между двумя одиночными кавычками: 'а'
real Число с плавающей запятой, реализуемое как 8 байт в соответствии с соглашением IEEE; эквивалентен типу double в С. При необходимости, целые автоматически преобразуются в real
string

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

Примеры строк:

telephone_number "railwayticket" "DoridInc"

Строки, которые пишутся в программе, могут достигать длины в 255 символов, в то время как строки, которые система VisualProlog считывает из файла или строит внутри себя, могут достигать (теоретически) до 4 Гбайт на 32-битных платформах

symbol Последовательность символов, реализуемых как указатель на вход в таблице идентификаторов, хранящей строки идентификаторов. Синтаксис — как для строк

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

Задание типов аргументов при декларации предикатов

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

Франк — мужчина, которому 45 лет.

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

person(frank, male, 45).

Для того чтобы объявить person (человек), как предикат с этими тремя аргументами, вы можете разместить в разделе predicates следующую строку:

person(symbol, symbol, unsigned).

Здесь для всех трех аргументов использованы стандартные домены. Отныне всякий раз при работе с предикатом person, вы должны передавать ему три аргумента, причем первые два должны быть типа symbol, а третий — типа integer.

Если в программе используются только стандартные домены, то нет необходимости использовать раздел domain; вы уже видели несколько программ такого типа.

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

alphabet_position(Letter, Position)

должна вернуть вам Position = 1, если Letter = a, Position = 2, если Letter = Ь и т. д. Предложения этого предиката могут выглядеть следующим образом:

alphabet_position(A_character, N).

Если при объявлении предиката используются только стандартные домены, то программе не нужен раздел domains. Предположим, что вы хотите описать предикат так, что цель будет истинна, если A_character является N-м символом алфавита. Предложения этого предиката будут такими:

alphabet_position('а', 1). alphabet_position('b', 2).

К-во Просмотров: 395
Бесплатно скачать Учебное пособие: Язык логического программирования Visual Prolog