- •Приложение 4-5
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Эрити Пролог Поставщик
Эрити Пролог (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
