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