2015-07-31 3 views
0

Надеюсь, я правильно рассмотрю вопрос.Понимание функционального программирования

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

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

Дело:

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

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

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

ответ

2

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

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

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

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

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

Taylor Series of sine function

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

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

Увлекательное введение в функциональное программирование вы можете найти в книге Structure and Interpretation of Computer Programs.

+0

Также можно увидеть [мастеров на работе] (https://youtu.be/2Op3QLzMgSY?list=PL8FE88AA54363BC46). – Sylwester

0

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

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

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

0

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

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

Смежные вопросы