Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow ИНТЕЛЛЕКТУАЛЬНЫЕ СИСТЕМЫ
Посмотреть оригинал

Императивный и декларативный принципы программирования

Одним из принципов организации ЭВМ, предложенной Джоном фон Нейманом, является программное управление. Программа для ЭВМ реализует алгоритм — последовательность действий, гарантированно приводящую к заданному результату. Таким образом, любая программа выполняет заранее заданную последовательность команд, начиная с первой команды (точки входа). Каждая команда задает инструкцию процессору: где брать исходные данные, какую операцию с ними выполнить, куда поместить результат и какую команду выполнить после этого. Это и есть императивный принцип программирования, при котором программист явно описывает все шаги вычислений.

Декларативный принцип программирования является полной противоположностью императивного принципа. Декларативная программа состоит из утверждений (аксиом или предикатов), а пользователь задает цель, истинность которой следует доказать с использованием этих аксиом. При этом механизм поиска решений реализован в интерпретаторе (машине логического вывода). Программист лишь указывает, что он хочет вычислить, но не говорит явно, как это сделать.

Идеалистический взгляд на логическое программирование выглядит следующим образом:

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

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

Декларативный принцип программирования призван материализовать математическую логику на ресурсах традиционных компьютеров. В качестве примера, демонстрирующего различия императивного и декларативного принципов, рассмотрим вычисление факториала. В традиционных алгоритмических языках факториал F = АП может вычисляться с помощью следующего алгоритма:

  • 1. Установить значение г= 1, F= 1.
  • 2. Если г > N, то перейти к и. 6.
  • 3. Присвоить г: = г + 1.
  • 4. Присвоить F: = F-i.
  • 5. Перейти к п. 2.
  • 6. Конец.

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

Реализация математического определения факториала на языке Prolog выглядит следующим образом1:

factorial (0,1).

factorial (N, F) N1 is N-l, factorial (N1, FI),

F is N* Fl.

Нетрудно увидеть, что программа на языке Prolog практически повторяет приведенное выше математическое определение факториала. Поскольку это определение рекурсивное, в данной программе также используется рекурсивный вызов. Первый предикат определяет, что 0! = 1 и в то же время задает условие выхода из рекурсии. Второй предикат вычисляет факториал ЛП в предположении, что факториал (N - 1)! известен.

Таким образом, декларативная программа содержит только формальную постановку задачи, а ее решение возлагается на машину вывода

 
Посмотреть оригинал
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы