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

Интерфейс с иными языками программирования

В СиПролог можно добавить дополнительные встроенные предикаты, если соответствующим образом модифицировать текст Си-программы, реализующей интерпретатор, и перекомпилировать ее.

Расширения языка

В СиПрологе имеется расширение, предназначенное для написания процедур нисходящего грамматического разбора с использованием форма­лизма Грамматики определенных предложений (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.

Как и в СиПрологе, запись символов между двойными кавычками служит альтернативной формой записи списка символов.

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