- •Приложение 4-5
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Унсв Пролог Поставщик
УНСВ Пролог (UNSW - сокращение от "University of New South Wales", что означает "Университет Нового Южного Уэльса") - это версия языка, являющаяся общественной собственностью. Она работает почти на всех компьютерах с операционной системой UNIX. Ее можно получить у лиц, уже имеющих исходный текст УНСВ Пролога. Пролог-86 (Prolog-86) - это версия УНСВ Пролога для операционных систем MS-DOS и СР/М. Эта версия Пролога поставляется фирмой MICRO-AI. Пролог-86 работает на ЭВМ IBM PC и совместимых с ними вычислительных машинах. В Прологе-86 можно пользоваться лишь ограниченным объемом памяти, но зато скорость выполнения программ очень высока, Халцедони Пролог (Chalcedony Prolog) - это версия УНСВ Пролога для операционных систем MS-DOS и Apple Macintosh, поставляемая фирмой Chalcedony.
Синтаксис и встроенные предикаты
Синтаксис Пролога-86 в основном аналогичен синтаксису DEC-10 Пролога, но имеются и некоторые важные различия. Для того чтобы было можно воспользоваться программами, приведенными в данной книге, рекомендуется модифицировать файл "prolog.lib" (или "prolog_lib"), поставляемый вместе с Прологом-86, включив в него библиотеку, обеспечивающую совместимость с DEC-10. Текст этой библиотеки приводится в конце раздела. Если этой библиотеки не будет, то многие из программ данной книги придется доработать, чтобы они смогли работать в среде Пролога-86 (например, будет нужно модифицировать списки символов).
Сообщение-подсказка верхнего уровня в Прологе-86 - это символ : . Если в ответ на подсказку пользователь введет фразу, заканчивающуюся точкой, то это будет воспринято как добавление фразы в программу, а не как запрос. Введенная фраза будет добавлена к множеству фраз текущей программы. Для того чтобы получился запрос к текущему множеству фраз, пользователь должен набрать фразу, оканчивающуюся вопросительным знаком. Принятый подход очень удобен для занесения фраз в программу в диалоговом режиме (когда пользователь не должен выдавать команду « consult (user)» для того, чтобы вводить новые фразы), но может привести к путанице, если пользователь привык к иным версиям Пролога.
Если пользователь введет запрос, содержащий переменные, то Пролог-86 автоматически напечатает все значения переменных, при которых запрос будет истинным, не делая после каждого ответа пауз в ожидании того, что пользователь наберет символ ;. Это создаст неудобства в случае, если ответов будет настолько много, что они все не поместятся на экране; При этом первые ответы могут пропасть с экрана до того, как выполнение запроса закончится. Ситуация станет особенно острой, если запрос будет обладать бесконечным количеством ответов. Наилучшим выходом из создавшегося положения будет написание интерпретатора верхнего уровня. Аргументом такого интерпретатора служит запрос, а после выдачи каждого ответа на запрос интерпретатор должен делать паузу.
Основная форма записи конструктора списка в Прологе-86 такова:
[a,b,..R]. Это означает то же самое, что и:
[a,b | R]
Пролог-86 воспринимает и символ | как конструктор списка, но этот символ будет преобразован в сочетание символов ". . ". Для связи подцелей можно воспользоваться символом | как синонимом символа ;.
В Прологе-86 имеются некоторые предикаты DEC-10 Пролога, а также и ряд дополнительных предикатов. Встроенные предикаты, предназначенные для работы с символами, рассматриваются ниже в подразделе "Типы".
В Прологе-86 предикат "consult" означает то же самое, что и в СиПро-логе. Все файлы, названия который задаются в командной строке при вызове Пролога-86 из среды операционной системы, будут автоматически просмотрены. Предикат "load" в Прологе-86 означает то же самое, что и "reconsult" в СиПрологе.
Встроенный предикат "ratom" считывает из входного потока один атом и, в отличие от встроенного предиката "read", не требует, чтобы после атома стояла точка. Встроенный предикат "print" печатает любое количество аргументов и затем выполняет переход к новой строке, а встроенный предикат "prin" печатает любое количество аргументов, после чего не переходит к новой строке.
Арифметические операторы ("is", "< " и т.д.) воспринимают символ " ^ " как обозначение операции. Выражение 2^3 означает два в третьей степени.
Типы
Основные типы Пролога-86 - это атомы, целые числа, структуры и символы. Вместо предиката ввода "get0", который вырабатывает значение ascii-кода символа из текущего входного потока, в Прологе-86 есть встроенный предикат "getc", который вводит символ из текущего входного потока. Вместо предиката "put", аргументом которого является значение ascii-кода выводимого символа, в Прологе-86 есть встроенный предикат "putc", аргументом которого является выводимый символ. Встроенный предикат «ascii (Символ, Код)» преобразует символ в его ascii-код и наоборот. В отличие от других версий Пролога, где вторым аргументом встроенного предиката "name" является список ascii-кодов (см. разд. 4.9), в Прологе-8 б в то рым аргументом предиката "name" служит список символов, который преобразуется в атом или обратно. (Ниже рассказывается, как в Прологе-86 можно определить версию предиката "name", эквивалентную предикату "name" других версий Пролога.)
В отличие от СиПролога, символы, записанные между двойными кавычками, интерпретируются как атом (т.е. так же, как и символы между апострофами), а не как альтернативная форма представления списка символов.