У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ

На нашем литературном портале можно бесплатно читать книгу У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ, У Клоксин . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале fplib.ru.
У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ
Название: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ
Автор: У Клоксин
Издательство: неизвестно
ISBN: нет данных
Год: неизвестен
Дата добавления: 6 март 2020
Количество просмотров: 302
Читать онлайн

Помощь проекту

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ читать книгу онлайн

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ - читать бесплатно онлайн , автор У Клоксин
1 ... 72 73 74 75 76 ... 79 ВПЕРЕД

foo((a,b,c))


Правило относительно операторов высокого приоритета касается только нескольких операторов, таких как ':-' и ';'. Оно означает, что запись вида:


?- retract(parent(A,B):- father(A,B)).


является синтаксически неправильной в смысле Пролога-10. Чтобы сделать ее правильной, нужно добавить пару скобок.

В том случае, если вы работаете с терминалом или с операционной системой, в которых не предусмотрено одновременного использования прописных и строчных букв, можно использовать имеющийся в Прологе-10 альтернативный вариант синтаксиса. В этом синтаксисе отличие переменных от атомов состоит в том, что имена переменных начинаются с литеры подчеркивания «_». Для перехода на этот вариант синтаксиса предусмотрен встроенный предикат nolc (нет строчных букв). Другой встроенный предикат, (строчные буквы), позволяет снова переключиться на нормальный синтаксис.

И еще одно маленькое замечание. Функтор '.' (с двумя аргументами) в Прологе-10 не является заранее определенным оператором. При желании вы можете определить его сами, хотя в этом нет необходимости, если при работе со списками вы всегда пользуетесь специальным способом задания списков.

Различные ограничения

В Прологе-10 предусмотрены ограничения, с которыми пользователь вряд ли столкнется на практике. Приоритеты операторов должны быть в диапазоне от 1 до 1200. Целые числа должны находиться в диапазоне от -131 072 до 131 071, однако в ходе вычислений целых выражений промежуточные результаты могут выходить за эти границы. Вещественные числа (с плавающей точкой) не предусмотрены.

Возможности окружения

В Прологе-10 предусмотрена очень полезная возможность протоколирования сеанса работы. При обычной работе с Прологом система фиксирует в файле plolog.log на диске почти все, что появляется на терминале. После того как работа закончена, вы можете просмотреть этот файл и точно определить, что происходило во время сеанса работы. Файл prolog.log содержит полезную информацию о том, что и когда делала ваша программа, и какие изменения вы в ней делали. На тот случай, если вы не хотите протоколировать все подряд, предусмотрены встроенные предикаты, обеспечивающие включение и выключение протоколирования.

В Прологе-10 можно прервать выполнение программы путем одновременного ввода комбинации символов «CONTROL С». Система отвечает приглашением и ждет от вас указаний о том, какое действие нужно выполнить далее. Набор допустимых команд включает break, continue (продолжить выполнение программы), exit (выход из Пролога), trace и notrace. Последние две команды вызывают продолжение выполнения программы после изменения вида или объема трассировки. Команда break позволяет приостановить выполнение текущей программы и предоставляет вам возможность работы с новой «копией» Пролог-системы. После выхода из команды break приостановленная программа продолжит свое выполнение.

В Прологе-10 в качестве литеры, играющей роль признака конца файла используется комбинация «CONTROL Z» (клавиша CONTROL одновременно с Z). Ее ввод, в зависимости от ситуации, в которой вы находитесь, приводит к выходу из Пролога, к завершению режима break или к завершению выполнения предиката consult. Встроенный предикат read в случае выхода на конец файла сравнивает свой аргумент с атомом end of file.

В Прологе-10 предусмотрены разнообразные средства, помогающие экономить время при повторном считывании программы. Можно сохранить «состояние» Пролог-системы, включая текущее состояние ее базы данных, в файле на диске, причем таким образом, что восстановление этого состояния происходит значительно быстрее, нежели чтение программы и приведение ее в то же самое состояние. Кроме того, в начале каждого сеанса работы, прежде чем начать ввод с терминала, Пролог-10 автоматически читает любую информацию, которая записана в файле plolog.ini.

Если во время выполнения Пролога-10 фиксируется ошибка, то система выводит сообщение, говорящее о том, что произошло. Большинство ошибок вызывают просто неудачу в согласовании тех целей, которые их породили, так что ваша программа может продолжать выполнение. Однако некоторые ошибки более серьезны. В этих случаях система прекращает выполнение всех имеющихся в данный момент программ и просит ввести очередной вопрос.

Компиляция

В Прологе-10 предусмотрена возможность выборочной компиляции некоторых из ваших утверждений, что позволяет значительно увеличить эффективность программ по времени выполнения и занимаемой памяти. Для этого имеется встроенный предикат, который действует подобно предикату consult, с той лишь разницей, что утверждения из файла не интерпретируются, а компилируются. Эффективность выполнения откомпилированных утверждений может быть увеличена за счет использования так называемых описаний режима, которые позволяют указать, как будут использованы данные утверждения (какие аргументы будут конкретизированы в различных ситуациях). Существуют определенные ограничения на пригодность утверждений для компиляции. Кроме того, системе необходимо задать некоторые другие описания, чтобы она смогла должным образом выполнять смесь интерпретируемых и откомпилированных утверждений.

Различия во встроенных предикатах

В Прологе-10 предусмотрены все встроенные предикаты, о которых говорилось в этой книге. Кроме того, он нормально обрабатывает грамматические правила, когда они встречаются в обычном consult. В данном разделе рассматриваются некоторые отличия от приведенных описаний.

Действие предиката display всегда состоит в выдаче аргументов этого предиката на терминал, а не в текущий файл вывода, как было описано.

При рассмотрении арифметических выражений мы говорили, что арифметическое выражение вычисляется только тогда, когда оно задано в качестве второго аргумента предиката is. Во всех других случаях структура вида '24-3' просто обозначает саму себя. В Прологе-10 это не так. Там вычисляются и арифметические выражения, заданные как аргументы других предикатов. Примером этого служат операторы отношения '‹', '=‹' и т. д., а также предикат put. Это означает, что приводимый ниже пример в Прологе-10 будет работать, а в нашем базовом Прологе выдаст ошибку или приведет к неудаче в согласовании цели.


?- 2+4‹12*(2+8).

yes


Еще одна особенность. Структура, представляющая собой список, состоящий из одного числа, рассматривается как арифметическое выражение, значением которого является число. Иными словами в Прологе-10 имеем:


?- X is [25].

X = 25

yes


Благодаря такой комбинации возможностей, вывод одиночных литер может быть задан в мнемоническом виде, например:


?- put("a"), put("b").

ab

yes


(не забывайте, что "а" – это список, состоящий из одного числового кода, соответствующего первой строчной букве алфавита).

Синтаксис отрицания. Предикат с именем not не предусмотрен, но вместо него используется инфиксный оператор '+' Отсутствует оператор «не равно» ('=').

Переменные как целевые утверждения. На самом деле это скорее вопрос синтаксиса, чем чего бы то ни было другого. Мы уже видели, как с помощью предиката call можно вызвать целевое утверждение, соответствующее текущему значению переменной Пролога. В Прологе-10 предусмотрен другой способ осуществления этого. Вместо того чтобы вставлять утверждение-цель вида

…, call(X),…

достаточно поставить на место цели саму эту переменную:

…, X,…

При этом использование варианта с call также возможно. Более того, при применении к такому утверждению asserta или assertz система преобразует цель X в цель call(X).

Задание аргументов для retract. Из-за трудностей, связанных с использованием переменных в качестве целей, в Прологе-10 существуют отличия в том, как должны задаваться тела утверждений в предикате retract. Трудность заключается в том, что когда мы задаем вопрос


?- retract((mother(A,B):- С)).


это может быть истолковано или как просьба об удалении утверждения, имеющего конкретный вид:


mother(A,B):- С.


где в теле утверждения переменная обозначает цель или как просьба об удалении утверждения для предиката mother с любым телом, как, например:


mother(X,Y):- parent(X,Y), female(Y).


Для устранения возможной двусмысленности, в подобных случаях Пролог-10 всегда начинает с замены неконкретизированных переменных, обозначающих одиночные или множественные целевые утверждения в аргументах для retract соответствующими структурами с функтором call. Таким образом, вопрос

1 ... 72 73 74 75 76 ... 79 ВПЕРЕД
Комментариев (0)
×