Особенности языка Пролог

В языке Пролог сочетается использование нескольких важных концепций, к числу которых относятся:

1) применение фраз Хорна для представления знаний;

2) дескриптивный стиль программирования;

3) как декларативная, так и процедурная семантика;

4) возможность чередовать программный текст метауровня с текстом объектного уровня.

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

0. 8. Синтаксис языка пролог

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

Во фразах Хорна после единственного заключения следуют ноль или более условий. На Прологе это записывается следующим образом:

заключение:—

условие1,

условие2,...

условиеN.

Здесь ": -" читается как "если", а "," читается как "и", поэтому всю фразу можно прочесть так:

Заключение будет истинным, если

условие1 и условие2 и... условиеN

будут истинными.

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

Пример Пролог-программы

Простейшей фразой Хорна может служить некоторый факт, состоящий из заключения, за которым не следуют никакие условия, например:

хакер (джон).

Это можно прочесть так:

Джон - хакер*).

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

получать_по _шее (джон):— хакер (джон).

можно прочитать так:

Джон получает по шее, если он хакер.

Обратите внимание на направление вывода, подразумеваемое этим правилом. Если уже известно, что Джон — хакер, то правило дает дополнительные знания о том, что Джон получает по шее. Слово « джон» — это обозначение константы, представляющей конкретную сущность в мире данной программы. Приведенные правило и факт содержат явные знания, относящиеся только к человеку по имени Джон.

Употребление переменной вместо константы

Переменная в языке Пролог записывается как слово, начинающееся с большой буквы. Правило "получать_по_шее", приведенное ранее, можно обобщить на всех хакеров, если константу «джон» заменить на переменную:

получать_по_шее (X): - хакер (X).

Это можно прочесть так:

Если Х - хакер, то он/она получает по шее.

Или же так:

Все хакеры получают по шее.

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

Декларативный стиль

Заметьте, что приведенные правила являются просто объявлениями отношений между сущностями. Пролог-программы почти исключительно состоят из таких объявлений, в этих программах не употребляются общепринятые управляющие структуры (do, while, for, goto и т.д.), специфицирующие порядок выполнения программы. Программист может переложить на механизм решения задач многие решения, касающиеся хода выполнения программы. Некоторые из языков запросов к базам данных (к примеру, язык SQL) также декларативны. Пользователь лишь должен указать то, какой тип ответа требуется, а интерпретатор языка запросов самостоятельно принимает решение о том, как получить ответ.

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие