Функциональное, декларативное и императивное программирование [закрыто]

Это работает для меня:

function removeDirectory($path) {
    $files = glob($path . '/*');
    foreach ($files as $file) {
        is_dir($file) ? removeDirectory($file) : unlink($file);
    }
    rmdir($path);
    return;
}
459
задан 2 February 2017 в 17:11
поделиться

5 ответов

Нет действительно никакого ненеоднозначного, объективного определения для них. Вот то, как я определил бы их:

Императив - фокус включен, что ступает, компьютер должен взять, а не что компьютер будет делать (напр. C, C++, Java).

Описание - фокус включен, что должен сделать компьютер, а не как это должно сделать это (напр. SQL).

Функциональный - подмножество декларативных языков, которое имеет тяжелое внимание на рекурсию

100
ответ дан duplode 3 February 2017 в 03:11
поделиться
  • 1
    Можно ли обеспечить ссылку для этого? Я, хотя создавая отслеживание стека являюсь даже более дорогим, когда Вы получили JIT, так как Вы имеете к deoptimize для восстановления фактического отслеживания стека. – akuhn 25 January 2010 в 01:16

Я думаю, что Ваша таксономия является неправильной. Существует два противоположных императива типов и описание. Функциональный просто подтип описания. BTW, Википедия указывает тот же факт.

3
ответ дан duplode 3 February 2017 в 03:11
поделиться
  • 1
    Большое спасибо, that' s действительно удобный. – Gordon 16 April 2010 в 14:10

Вкратце:

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

А декларативный язык объявляет ряд правил о том, из чего должны следовать выводы, какие исходные данные (например, если у Вас есть A, тогда результатом является B). Механизм применит эти правила к исходным данным и даст вывод.

А функциональный язык объявляет ряд математических / логических функций, которые определяют, как введенный переводится в выходной. например, f (y) = y * y. это является типом декларативного языка.

50
ответ дан duplode 3 February 2017 в 03:11
поделиться

Короче говоря, чем больше в стиле программирования делается акцент на том, что (делать), абстрагируясь от деталей того, как (делать)), тем больше этот стиль считается декларативным. Обратное верно для императива. Функциональное программирование связано с декларативным стилем.

2
ответ дан 22 November 2019 в 22:55
поделиться

Декларативное программирование - это программирование, выражающее некоторую вневременную логику между входом и выходом, например, в псевдокоде следующий пример был бы декларативным:

def factorial(n):
  if n < 2:
    return 1
  else:
    return factorial(n-1)

output = factorial(argvec[0])

Мы просто определили здесь отношение, называемое "факториал", и определили отношение между выходом и входом как это отношение. Как должно быть очевидно, практически любой структурированный язык в той или иной степени допускает декларативное программирование. Центральной идеей декларативного программирования является неизменяемость данных: если вы присваиваете переменную, то делаете это только один раз, и больше никогда. Другие, более строгие определения подразумевают, что побочных эффектов может вообще не быть, такие языки иногда называют "чисто декларативными".

Тот же результат в императивном стиле будет выглядеть так:

a = 1
b = argvec[0]
while(b < 2):
  a * b--

output = a

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

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

К чисто декларативным языкам относятся Haskell и Pure Prolog. Скользящая шкала от одного к другому выглядит следующим образом: Pure Prolog, Haskell, OCaml, Scheme/Lisp, Python, Javascript, C--, Perl, PHP, C++, Pascall, C, Fortran, Assembly

3
ответ дан 22 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: