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

10.4. Доступность метапеременных

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

На практике в большинстве реализации языка Пролог отсутствует введенное нами ограничение для логических программ, а именно: цели в теле предложения должны быть термами, отличными от переменных. Доступность метапеременных означает, что в качестве целей в конъюнктивных вопросах и в теле предложений разрешается использовать переменные. В процессе вычисления в момент обращения к такой переменной ей должно быть сопоставлено значение-терм. Если переменной не сопоставлено значение в момент обращения, то возникает ошибочная ситуация. Доступность метапеременных является синтаксическим средством, обеспечиваю­щим условия применения предиката call.

Доступность метапеременных является важным инструментом метапрограммирования, используемым, в частности, при построении метаинтерпретаторов и оболочек. Два важных примера подобных программ - простая оболочка (програм­ма 12.6) и метаинтерпретатор (программа 19.1) будут обсуждаться в последую­щих главах. Это же средство существенно используется при определении отрицания (программа 11.5) и при определении предикатов высших порядков, описанных в разд. 17.3.

В заключение приведем пример использования метапеременных в определении логической дизъюнкции, обозначенной инфиксным бинарным оператором “;”. Цель (X; Y) выполнена, если Х и Y выполнено. Определение оформлено как программа 10.8.

X;Y

Х или Y

X; Y X.

X; Y  Y.

Программа10.8. Логическая дизъюнкция.

10.5. Дополнительные сведения

Блестящее обсуждение системных металогических предикатов в Прологе-10 и описание их использования можно найти в (O'Keefe, 1983b).

Процедура унификации Параллельного Пролога, написанная на Прологе, имеется в работе (Shapiro, 1983).

Предикаты freeze, melt и melt_new были введены в статье (Nakashima, Ueda, 1984), там же обсуждается их использование в Прологе-10.

Название freeze предполагалось использовать для других раширений чистого Пролога. Наиболее радикальным из них является предикат geler (Colmerauer, 1982b), позволяющий приостанавливать решение целей и предоставляющий программисту дополнительные средства управления порядком целей.

Соседние файлы в папке 1-13