- •Приложение 4-5
- •IV. Версии языка пролог СиПролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда для разработки программ
- •Отладчик
- •Отладочные команды
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения языка
- •Квинтус Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Система программирования на Прологе фирмы Сайлоджик Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Пролог-2 Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •Эрити Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Расширения
- •Унсв Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Директивы
- •Среда разработки программ
- •Отладчик
- •Компилятор
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Турбо Пролог Поставщик
- •Синтаксис и встроенные предикаты
- •Среда разработки программ
- •Отладчик
- •Запомненные состояния
- •Интерфейс с иными языками программирования
- •Расширения
- •V. Ответы к упражнениям Ответы к упражнениям
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
Директивы
Если пользователь поставит в конце запроса восклицательный знак, то этот запрос будет выполнен, но никакая выходная информация при этом не будет выводиться. Запрос, после которого стоит восклицательный знак» называется «командой». При просмотре файла интерпретатор трактует содержимое файла точно так же, как если бы оно непосредственно вводилось пользователем. Так, если факт в файле исходного текста заканчивается вопросительным знаком, то при просмотре этого файла данный факт будет рассматриваться как запрос, который будет выполнен до того, как интерпретатор перейдет к просмотру остальной части файла. Если факт завершается восклицательным знаком, то этот факт будет выполнен как команда (т.е. не будет выдаваться никакой выходной информации) до перехода к просмотру оставшейся части файла. Интерпретатор будет также рассматривать как команду и запрос, перед которым стоят символы :— и который заканчивается точкой.
Среда разработки программ
В Прологе-86 отсутствует встроенный редактор, поэтому при разработке программ программисту придется воспользоваться средствами операционной системы.
В УНСВ Прологе имеется встроенный предикат "ed/1", обеспечивающий переход к редактированию процедуры во время сеанса работы с Прологом. Перед запуском Пролога следует определить имя редактора операционной системы UNIX при помощи переменной "EDITOR" интерпретатора команд "shell" этой операционной системы. Для редактирования программы во время сеанса работы с Прологом вызывается предикат "ed/1 ", в качестве аргумента которого задается имя определенной в данный момент процедуры. Предикат "ed/1" перепишет все фразы указанной процедуры во временный файл, а затем запустит заданный редактор для корректировки временного файла. При этом редактор будет процессом-потомком Пролог-процесса. После окончания сеанса редактирования старые фразы процедуры заменяются на фразы из временного файла, а сам в ременный файл уничтожается.
Отладчик
Отладчик Пролога-86 отдаленно напоминает отладчик СиПролога. Однако в Прологе-86 отсутствуют контрольные точки, нет диалоговых отладочных команд и нет возможности проследить за выполнением всех процедур, не указывая их имена. Отладчик включается при помощи вызова предиката "trace/1 ", аргументом которого является имя одной процедуры или список имен процедур. Когда при выполнении запроса встречаются трассируемые процедуры, отладчик печатает информацию о них в стандартных четырех точках: call (вызов), exit (выход), fail (неудача) и redo(noвторное выполнение). В сообщениях отладчика отсутствует уникальная идентификация вызова процедуры, однако при помощи символов \ , располагающихся перед самой подцелью, показывается количество предков этой подцели. Тем самым при выполнении запроса к рекурсивной процедуре получается интересное графическое представление. Пример выходной информации, выдаваемой при запросе к предикату "member":
: trace member?
** да
: member (а, [с, b,a])?
С | > member(a, [с, b, a])
С | |> member (a, [b, а])
С | | |> member (а, [а])
Е | | | < member (а, [а])
Е | | < member (a, [b, а])
Е | < member (а, [с, b, а])
* * да
Символ С, стоящий в начале строки, обозначает точку вызова, а символ Е — точку выхода.