Скачиваний:
20
Добавлен:
01.05.2014
Размер:
287.74 Кб
Скачать

Эрити Пролог Поставщик

Эрити Пролог (Arity Prolog) поставляется фирмой Эрити Корпорейшн. Он работает под управлением операционной системы MS-DOS на ЭВМ IBM PC или совместимой с ней.

Синтаксис и встроенные предикаты

Синтаксис Эрити Пролога аналогичен синтаксису DEC-10 Пролога. Все примеры из данной книги будут работать в системе Эрити Пролог-При этом, однако, для операционной системы MS-DOS в процедуре "Вводполя" (см. разд. 3.9 и Приложение П) потребуется заменить код символа перехода к новой строке с 10 на 13. Символ 1 можно использовать как синоним символа ; для соединения подцелей. В Эри­ти Прологе имеется новая синтаксическая особенность, называемая отрезком (snip). В составном запросе отрезком называется совокупность подцелей, расположенных между сочетаниями символов [! и !]. Интерпре­татор не будет возвращаться назад ни для какой подцели, содержащейся в отрезке. Это эквивалентно тому, как если бы все подцели, расположен­ные внутри отрезка, выступали в роли аргументов предиката "один раз" (см. разд. 3.2),

В Эрити Прологе есть большинство встроенных предикатов DEC-10 Пролога. Для управления файлами, помимо предикатов "see", "tell" и т.д., описанных в разд. 3.5, имеются нижеследующие встроенные преди­каты, в которых используются идентификаторы потоков (называемые handles):

create (S, F) F - имя файла. S идентификатор потока. Данный пре­дикат создает новый файл для записи.

open(S, F, А) F — имя файла. S — идентификатор потока. А - режим доступа к файлу: r, w , a, rw или га, где r означает чтение, w — запись, а a — запись в конец файла. Данный встроенный предикат открывает файл с заданным режимом обмена информацией.

close (S) S — идентификатор потока, сгенерированный при обращении к предикату "open" или "create".

Существуют варианты каждого стандартного предиката ввода-вывода ("get", "read", "put", "write" и т.д.) с двумя аргументами, одним из которых является идентификатор потока. Приведем пример, в котором

считываются термы из файла, открытого предикатом "open":

?- open (SI, 'ар. data', r), repeat,

read(Sl,R), обработка (R), R= end_of_file, close(S1).

Арифметические функции

Арифметические операторы (такие как "is", "< " и т.д.) позволяют

выполнять обычные арифметические операции и вдобавок вычислять ряд других функций:

random % число между 0 и 1

abs (X) % абсолютное значение Х

sqrt (X) % квадратный корень из X

ехр (X) % е в степени Х

log (X) % десятичный логарифм Х

In (X) % натуральный логарифм Х

X^Y %Х в степени Y

sin (X)

cos (X)

tan (X)

asin (X)

асos (X)

atan(X)

и т.д.

Типы

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

Если все аргументы арифметического выражения являются целыми числами, то и результат вычисления этого выражения будет целым числом. Если в выражении попадаются числа с плавающей точкой, то в результате вычисления выражения получится число с плавающей точкой. Результа­том операции деления / будет число с плавающей точкой, а результатом операции деления // будет целое число.

Строки

Символы, записанные между знаками доллара, интерпретируются как строка. В строку могут входить символы перевода строки. Поскольку строка имеет внутреннее представление в виде массива символов, строки

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

?- $california$ = California.

нет

?-$california$= = California.

да

Нижеследующие встроенные предикаты специально предназначены для работы со строками:

% ввод-вывод:

read_string (МаксДлина, Строка)

%из текущего входного потока

read_string (S, МаксДлина, Строка)

% из потока S

read_line (S, Строка) % из потока S

write (Строка) % как и write (Атом)

% преобразование:

string_term (Строка, Терм)

atom_string (atom, Строка)

int_ text (Целое, Строка)

float_text (Плавающее, Строка)

list_text (Список, Строка) % [97,98] в$аb$

% другое:

string_search (Шаблон, Строка, Позиция)

substring (Строка, Позиция, Длина, Подстрока)

string_length (Строка, Длина)

соncat (S1, S2, S3) % S3 - это S1, сцепленная с S2

Соседние файлы в папке Гл.6,7,Прилож.,Допол