Понимание функционального программирования

Надеюсь, я правильно обдумываю свой вопрос.

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

Пока я следил за курсом функционального программирования, они упомянули один момент. Я хочу понять это до глубины души..

Дело в том:

Если мы хотим реализовать концепции высокого уровня в соответствии с их математическими теориями, мутациям не место.

Из этого я понял, что значение/коэффициент, назначенный конкретной переменной, должен быть одинаковым и не может время от времени переназначаться для создания из него абстрактного определения. это правильно?

Можете ли вы добавить еще несколько пунктов?


person Srini    schedule 31.07.2015    source источник


Ответы (3)


Вы можете думать об этом таким образом. В начале 20 века уровень математики стал настолько высоким, что ученые смогли применить ее к изучению математических методов, в частности расчетов и доказательств.

В результате исследований выделяют два основных подхода: машина Тьюринга и лямбда-исчисление.

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

Во втором подходе (лямбда-исчисление) любой расчет рассматривается как комбинация нескольких функций.

Ф.э. давайте посмотрим ряд Тейлора синусоидальной функции:

Ряд Тейлора синусоидальной функции

Первое выражение дает нам пример функционального расчета. Нет шагов для вычисления синуса, есть просто комбинация функций. На вход этих функций подаются две вещи: x и ряд натуральных чисел 1, 2, .... Мы сопоставляем некоторую сложную функцию с каждым элементом ряда, затем сводим новый ряд к одному значению с помощью функции +.

Второе выражение дает нам пример императивного вычисления. По крайней мере, здесь мы видим отдельные этапы расчета.

Увлекательное введение в функциональное программирование вы можете найти в книге Структура и интерпретация. компьютерных программ.

person Mark Shevchenko    schedule 31.07.2015
comment
Также можно увидеть работу мастеров. - person Sylwester; 01.08.2015

Если нет мутации, нет необходимости в переменных. Это первое.

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

person pkalinow    schedule 31.07.2015

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

var a = "test"
def foo() = {
    a = "foo"
}
def bar() = a

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

person Dmitry Meshkov    schedule 31.07.2015