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

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

Синтаксис Пролога-2 аналогичен синтаксису DEC-10 Пролога, хотя есть и некоторые отличия. В Прологе-2 комментарии записываются между обозначениями /*и */, а символ % не является признаком комментария. Директива записывается после символов ?—. После того как интерпре­татор верхнего уровня найдет ответ на запрос, он печатает вслед за отве­том сообщение-подсказку «more (у/п)?» (еще? (да/нет)). Ввода дан­ном месте символа "у" эквивалентен вводу точки с запятой в других версиях Пролога. Это побуждает интерпретатор приступить к поиску дру­гого ответа.

Все примеры данной книги работоспособны в среде Пролога-2, при этом они не нуждаются в каких-либо модификациях. В Прологе-2 имеются все встроенные предикаты DEC-10 Пролога. Они находятся либо в "ядре" Пролога-2, либо в библиотеке, обеспечивающей совместимость с версией DEC-10. Существует и много дополнительных встроенных предикатов.

Весь ввод-вывод Пролога-2 основывается на потоках. Обычные пре­дикаты ввода-вывода ("see", "tell" и т.д.) автоматически создают и откры­вают потоки. Поток может быть окном (см. далее). Нижеследующие встроенные предикаты обеспечивают более точное управление потоками.

create_ stream (N, А, Т, D)

N должно быть уникальным именем потока. А — это код доступа:

«read» (чтение), « write» (запись) или « readwrite» (чтение и запись). Т — тип данных, передаваемых потоком, —либо «byte» (восьмибитовые), либо « ascii» (семибитовые) . D — это структура, описывающая поток. Если D — структура "window/3" (окно/3), то предикат "create_stream" образует новое окно в соответствии с параметрами этой структуры. В ка­честве D можно также использовать структуру "file/1", аргументом кото­рой является имя файла.

open (N,A)

N —имя потока, созданного предикатом "create_ stream". A - код доступа:

«read», «write» или «readwrite». Встроенный предикат "ореn/2" открывает названный поток для заданного типа доступа.

screen (V,C)

Дпя отображения окна на экране дисплея необходимо открыть ад я него видеопорт (viewport). V — имя открываемого видеопорта. С —управляю­щая структура, указывающая, что необходимо сделать с этим видеопор­том. Если С - структура "create/11" (создать/11), один из аргументов которой — это имя окна, образованного при помощи встроенного преди­ката "create_stream" и открытого предикатом "ореn/2", то предикат "screen" откроет видеопорт для этого окна.

state (T,_,N)

Если окно было создано с помощью встроенного предиката "create_stream", открыто при помощи предиката "ореn/2" и появилось на экране в резуль­тате обращения к предикату "screen/2", то можно воспользоваться встроен­ным предикатом "state/3" для связывания этого окна с текущим входным и/или выходным потоком. (Помимо управления текущими входным и вы­ходным потоками, предикат "state/3" может выполнять и ряд других

функций.) N - имя открытого потока, связываемого с окном. Т - либо « input» (входной), либо « output» (выходной).

close (N)

N — имя открытого потока. Этот предикат закрывает поток. Поток, одна­ко, все еще продолжает существовать и его можно снова открыть при по­мощи встроенного предиката "ореn/2". Если N - имя окна, то все ви-деопорты этого окна ликвидируются» а содержимое окна теряется,

delete-stream (N)

N — имя потока, созданного предикатом "create_stream". Встроенный предикат "delete_stream" удаляет названный поток.

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

Арифметические операторы ("is", "<"и т.д.) в дополнение к обыч­ным арифметическим операциям будут вычислять и ряд функций, в число которых в ходят:

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

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

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

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

length (X) % длина строки Х

sin (X)

cos (X)

tan(X)

asin (X)

acos(X)

atan (X)

и т.д.

Типы

Основные типы Пролога-2 ~ это атомы, целые числа, числа с плаваю­щей точкой, структуры и строки.

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

Строки

Строки в Прологе-2 используются в большинстве таких ситуаций, когда в других версиях этого языка применяются списки символов. Символы, записанные внутри двойных кавычек, рассматриваются как строка, а не как список символов. Поскольку строка имеет внутреннее представление в виде массива символов, она занимает в памяти меньше места, чем список символов (в списке дополнительная память тратится на указатели, связывающие друг с другом его элементы. - Примеч. пер.). Во многих случаях аргументами встроен­ных предикатов Пролога-2 являются строки, а не списки символов, как в других версиях этого языка. Примером такого предиката может служить "name" (см. разд. 4.9). Для работы со строками имеется специальный встроенный предикат "is_string/2". Вторым аргументом этого преди­ката должна быть одна из нижеследующих строковых функций, которую данный предикат выполняет и результат которой возвращает через первый аргумент.

Строковые функции % сцепить две строки:

X&Y

% вставить строку Y в строку Х

% с позиции Р:

insert (X, Y, Р)

% удалить N символов из % строки Х с позиции Р delete (X, Р, N)

% выделить N символов из % строки X, после позиции Р:

substring (X.P.N)

и т.д.

Пример

?— Z is—string substring (California, 2,4).

Z="lifo"

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