На этом шаге мы остановимся более подробно на декларативной (логической) парадигме .
В толковых словарях [1-4] Вы можете прочесть, что языки декларативного программирования (Declarative languages) - класс языков программирования, программа на которых задает связи и отношения между объектами и величинами и не определяет последовательность выполнения действий. При использовании декларативного языка в программе в явном виде указывается, какими свойствами должен обладать результат, но не говорится, каким способом он будет получен; подходит любой способ получения результата, обладающего требуемыми свойствами.
Поскольку в основе декларативных языков заложены статические, а не динамические понятия (т.е. определяется "что", а не "как"), такие понятия, как упорядочение и поток команд управления, не имеют никакого отношения к этим языкам и в них нет каких-либо операторов присваивания. В идеальном случае программа на декларативном языке будет состоять только из неупорядоченной системы уравнений, характеризующий требуемый результат. Однако в связи с тем, что реальная программа должна быть легко реализуемой и достаточно эффективной, такая идеальная модель не выдерживается - для этого существующие декларативные языки должны были бы иметь абсолютно совершенный синтаксис и стиль. Декларативные языки не привязаны к классической фон-неймановской модели вычислений, и в типичном случае алгоритм достижения требуемого результата может иметь высокую степень параллелизма. Степень "декларативности" языка является относительным понятием: PROLOG является декларативным языком по сравнению с языком ассемблера, но его можно рассматривать как императивный язык по сравнению с языками представления знаний.
Дж.Робинсон пишет [5, с.13]: "Внешне функциональное программирование выглядит как понятие, независимое и несколько обособленное от логического программирования. Однако я утверждаю, что и то и другое являются примерами более общей, фундаментальной, единой и простой идеи, которую можно было бы ... назвать "утвердительное программирование". Это тип программирования, когда вы занимаетесь тем, что утверждаете о некоторых предложениях, что они истинны, и затем просите вывести другие предложения как их следствия.
В логическом программировании эти утверждаемые предложения имеют вид импликаций, а в функциональном - равенств (уравнений). Но это в действительности только внешнее различие. Я думаю, что главное здесь то, что, когда вы запускаете системы того или иного вида, вы запускаете дедуктивные машины: просите их выполнить для вас нужные дедукции (выводы)."
Приведем "архитектуру" декларативной (логической) парадигмы, которая, на наш взгляд является полезным инструментом для формирования взгляда на методику преподавания программирования:
Рис.1. Дерево логической парадигмы
Символы "???" на схеме означают, что нам неизвестны объектно-ориентированные реализации языков продукционного программирования.
К языкам эквационального программирования мы отнесем языки, семантика которых основана на системах
подстановок. К этой парадигме часто относят и языки OBJ, AFFIRM, MAPC. Так как это
экспериментальные языки, не претендующие на высокую эффективность реализации, их, возможно, уместнее называть
языками эквациональной спецификации.
Со следующего шага мы начнем рассматривать перечисленные на рисунке 1 парадигмы, в частности, резолюционную (хорновскую) парадигму.