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

Унсв Пролог Поставщик

УНСВ Пролог (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" других версий Пролога.)

В отличие от СиПролога, символы, записанные между двойными ка­вычками, интерпретируются как атом (т.е. так же, как и символы между апострофами), а не как альтернативная форма представления списка сим­волов.

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