f(a,g(2,3),c)
на микро-Прологе должно быть записано как:
(f a (g 2 3) с)
Здесь мы сталкиваемся также и с иным синтаксисом задания списков, где списки заключены в круглые скобки, а элементы списков разделяются пробелами.
Утверждения представляются как списки термов, где первый терм – это заголовок утверждения, а остальные термы – цели, которые, будучи взятыми в конъюнкции, образуют тело утверждения. Рассмотрим более сложное утверждение:
((alter (zl|z2) (x|y)) (change zl x) (alter z2 у)
Это – второе утверждение для предиката alter(преобразовать) из разд. 3.4. Заметим, что вертикальная черта имеет здесь то же значение, что и в базовом синтаксисе.
Различные ограничения
Микро-Пролог может обрабатывать числа с плавающей точкой с точностью до восьми значащих цифр и с порядком (по основанию 10) в диапазоне от -127 до 127. Имена атомов (называемые в микро-Прологе «константами») могут содержать до 60 литер, а терм не может содержать более 64 переменных. Эти ограничения на практике не вызывают трудностей.
Возможности окружения
Микро-Пролог предоставляет множество средств, помогающих при разработке программ за терминалом. Предикаты LOADи SAVEпозволяют, соответственно, читать и записывать программы в файлы на диске. Мощный строчный редактор и структурный редактор позволяют вносить изменения в тексты программ, не выходя из Пролог-системы. Выполнение микро-Пролог-программы может быть прервано путем ввода комбинации «CONTROL С».
Специальные встроенные предикаты
Имена и назначение встроенных предикатов сильно отличаются от рассмотренных в данной книге. Ниже приводится краткое описание некоторых из предусмотренных средств.
Тип терма можно проверить с помощью предикатов NUM, CON, VAR,которые согласуются с базой данных, соответственно, в случае чисел, констант (атомов) и переменных. Кроме того, предикат SYSпроверяет, является ли константа именем встроенного предиката, предикат 1NTобеспечивает проверку на целое число.
Для работы с базой данных используются предикаты: ADDCL(аналогичен assert), CL(аналогичен clause)и DELCL(аналогичен retract)В этих предикатах можно задавать дополнительный целочисленный аргумент Nс тем, чтобы можно было обрабатывать N-e утверждение процедуры.
Поскольку единственным видом терма в микро-Прологе является список, то предикат вида ' =..' здесь не нужен. Предикат STRINGпозволяет программисту создавать новые атомы и осуществлять доступ к внутренней структуре имени атома аналогично тому, как это делается с помощью предиката name.
Составные цели в микро-Прологе можно конструировать с помощью встроенных предикатов OR, NOTи IF.Предикат FAILвызывает немедленную неудачу в согласовании цели. Предусмотрено также и «отсечение», которое обозначается с помощью литеры '/'.
Арифметические действия реализуются посредством нескольких предикатов, вместо одного is. Арифметические предикаты максимально «обратимы», поэтому, например, цель
(SUM х у г)
вызывает сопоставление z с суммой х и у, если х и у конкретизированы. С другой стороны, если сначала конкретизированы у и r, а х – нет, то х будет конкретизирован разностью z-у.
Операции с файлами в микро-Прологе аналогичны тем, что имеются в базовом Прологе, с той лишь оговоркой, что здесь нет понятия текущего потока ввода или текущего потока вывода. Вместо этого вывод в файл и ввод из файла осуществляются, соответственно, через предикаты WRITEи READс указанием каждый раз имени файла. Предусмотрены специальные предикаты, обеспечивающие удобства при вводе-выводе через терминал пользователя.
Микро-Пролог позволяет программисту разрабатывать программы по частям, которые называются модулями. Такая возможность сокращает вероятность случайных конфликтов имен в про-граммах и облегчает обмен программами между программистами.
Средства отладки
В микро-Прологе предусмотрена возможность трассировки программы, однако средства трассировки должны быть предварительно загружены с помощью предиката LOAD. При трассировке выдается информация о процессе согласования всех целей, не содержащих встроенных предикатов. В моменты возникновения событий CALL, EXITи FAIL, которые именуются, соответственно, как ENTER, FINISHи FAIL, выдаются соответствующие сообщения. Пользователю разрешается в момент события CALLвмешиваться в ход трассировки и задавать команды CONTINUE(продолжить выполнение с трассировкой), SKIP(прервать трассировку до завершения текущей цели), FINISH(немедленное согласование текущей цели) и FAIL(немедленная неудача в согласовании текущей цели).
Читать дальше