Логическое программирование

Эквивалентность программ и данных


Характерной особенностью Пролога является эквивалентность программ и данных - и то и другое может быть представлено логическими термами. Для того, чтобы можно было использовать эту эквивалентность, необходимо, чтобы программы можно было рассматривать в качестве данных, а данные можно было бы превращать в программы.

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

Вместо вызова предиката call(X) можно писать просто X.

Доступность метапеременных является важным инструментом метапрограммирования, используемым, в частности, при построении метапрограмм, которые обращаются с другими программами как с данными; они выполняют их анализ, преобразование и моделирование. Это же свойство существенно используется при определении отрицания и при определении предикатов высших порядков.

Пример:  Определение отрицания.

not X :- X,!, fail.

not X.

Обладаю ли я знаниями? Нет. Но когда низкий человек спросит меня о чем-либо, то, даже если я не буду ничего знать, смогу рассмотреть этот вопрос с двух сторон и обо всем рассказать ему.

Конфуций



Содержание раздела