
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Интерфейс с иными языками программирования
В СиПролог можно добавить дополнительные встроенные предикаты, если соответствующим образом модифицировать текст Си-программы, реализующей интерпретатор, и перекомпилировать ее.
Расширения языка
В СиПрологе имеется расширение, предназначенное для написания процедур нисходящего грамматического разбора с использованием формализма Грамматики определенных предложений (DCG). Посмотрите, как в системе записи DCG будет выглядеть простая грамматика из гл. 6:
% Грамматика из гл. 6, представленная на Прологе :
% нетерминалы:
% Вход Выход Имя
объект (I, О, предложение) :-
объект (I, R, группа_существительного),
объект (R, О, глагольная_группа).
объект (I, О, группа_существительного): -
объект (I, R, артикль),
объект (R, О, существительное).
объект (I, О, глагольная группа):—
объект (I, R, глагол),
объект (R, О, группа_существительного).
% терминалы:
% Вход Выход Имя
объект([ thе | R], R, артикль).
объект ([cow | R], R, существительное).
объект ([tail | R], R, существительное).
объект ([shakes | R], R, глагол).
объект ([walks | R], R, глагол).
% Грамматика в форме записи DCG:
предложение—>группа_существительного,глагольная_группа.
группа_существительного —> артикль, существительное.
глагольная_ группа —> глагол, группа_существительного.
артикль ——>[the].
существительное --> [cow].
существительное --> [tail].
глагол -–> [shakes].
глагол —> [walks].
Форма записи DCG обладает многими свойствами, облегчающими написание грамматик. Подробное описание см. в [ 110].
Квинтус Пролог Поставщик
Квинтус Пролог (Quintus Prolog) поставляется фирмой Квинтус Компьютер Системз Инк. Он предназначен для ЭВМ, работающих под управлением операционных систем UNIX и VMS. Вместе с транслятором предоставляется большая библиотека вспомогательных программ. Квинтус Пролог отличается очень высокой скоростью выполнения программ.
Синтаксис и встроенные предикаты
Синтаксис Квинтус Пролога такой же, как и у DEC-10 Пролога. Все программы, приведенные в настоящей книге, будут (без необходимости внесения в них каких-либо исправлений) работоспособны в среде Квинтус Пролога. В Квинтус Прологе имеется большинство встроенных предикатов DEC-10 Пролога, а также ряд новых предикатов. Отличия во встроенных предикатах между этими версиями Пролога в основном сводятся к различному управлению файлами.
Помимо встроенных предикатов "see", "tell" и т.д., описанных в разд.4.5, в Квинтус Прологе есть нижеследующие предикаты, в которых для слежения за открытыми файлами применяются идентификаторы потоков.
open (F, M, S) F - это имя файла, М - один из трех атомов, обозначающих режим работы с файлами - «read» (читать), «write» (писать) или « append » (писать в конец файла). Этот предикат открывает файл заданного вида и конкретизирует переменную S, которая становится уникальным идентификатором потока.
set_input(S) S должно быть уникальным идентификатором потока, порожденным при вызове предиката "ореn/3" с аргументом, указывающим режим работы с файлом, равным read. Данный встроен
ный предикат связывает файл, обозначенный переменной S, с текущим входным потоком.
set_output(S) S должно быть уникальным идентификатором потока, порожденным при вызове предиката "ореn/3" с аргументом, указывающим режим работы с файлом, равным write или append. Данный встроенный предикат связывает файл, обозначенный переменной S, с текущим выходным потоком.
close (S) S должно быть уникальным идентификатором потока, порожденным при вызове встроенного предиката "ореn/3". Этот предикат закрывает файл, обозначенный переменной S.
Пример :
| ?— ореn(' ар.data', read, S1),
set_input(S1),
repeat,
read(R)
обработать (R),
R = end_of_file,
close(S1),
set_input(user).
Стоит отметить, что если встроенный предикат "set_input" применяется внутри запроса для переадресации входного потока к открытому файлу, то после окончания выполнения запроса входной поток автоматически вернется обратно к терминалу. В СиПрологе описанное действие не осуществляется, если пользователь в запросе открывает файл при помощи встроенного предиката "see". Если пользователь не закроет входной файл в том же самом запросе при помощи предиката "seen", то интерпретатор продолжит прием входных данных из открытого файла, а после достиже-ния конца файла сеанс работы с Прологом будет завершен.
Встроенный предикат "current_stream/3" можно использовать для получения идентификаторов потоков и режимов работы любых открытых файлов. Имеются разновидности и других предикатов ввода-вывода ("write", "read" и т.д.), в которых одним из аргументов служит идентификатор потока и которые осуществляют чтение или запись в файл, связанный с этим идентификатором.
В Квинтус Прологе есть предикат форматного вывода "format/2", форматизирующий тексты аналогично функции "printf" языка Си.
Команда "consult" в Квинтус Прологе означает то же самое, что и команда "reconsult" в СиПрологе, т.е. для каждого предиката из просматриваемого файла система удалит из текущей программы все фразы, относящиеся к этому предикату, а только потом добавит в программу из файла данную фразу. Этот механизм осуществляет защиту от многократного
добавления в программу одних и тех же фраз. Если объявить процедуру как "многофайловую" ("multifile"), то данный механизм работать не будет.
Типы
Основными типами в Квинтус Прологе являются атомы, целые числа, числа с плавающей точкой и структуры. Как и в СиПрологе, если все аргументы арифметического выражения являются целыми, то результат вычисления этого выражения (например, при помощи встроенного предиката "is") также будет целым. Если в выражении встречаются числа с плавающей точкой, то в результате вычисления этого выражения получится число с плавающей точкой. Для выполнения деления, однако, есть две разных операции. Результатом деления при помощи операции / всегда будет число с плавающей точкой, а результатом деления посредством операции // всегда будет целое число. Числа с плавающей точкой можно записывать с указанием их порядка, например 6.1 Е10.
Как и в СиПрологе, запись символов между двойными кавычками служит альтернативной формой записи списка символов.