В Прологе-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не предусмотрен, но вместо него используется инфиксный оператор '\+' Отсутствует оператор «не равно» ('\=').