Внелогические предикаты


Лекция №8

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

Характерной особенностью Пролога является эквивалентность программ и данных – и то и другое может быть представлено логическими термами. Для того чтобы можно было использовать эту эквивалентность, необходимо, чтобы программы можно было рассматривать в качестве данных, а данные можно было бы превращать в программы. В данном разделе описывается средство, позволяющее превращать терм в цель. Смысл предиката 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. Логическая дизъюнкция.

 


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