Функциональная
by Алонзо Чёрч
Происхождение
Функциональное программирование базируется на работах Алонзо Чёрча, который в 1930-х годах разработал λ-исчисление (лямбда-исчисление) — математическую основу для функционального программирования.
Исторический контекст
Лямбда-исчисление Чёрча стало основой для языков, таких как Lisp (разработан Джоном Маккарти в 1958 году) и более поздних функциональных языков, таких как Haskell и ML.
Функциональная парадигма программирования трактует процесс вычисления как вычисление значений функций в математическом понимании, где функции являются первоклассными объектами. В функциональном программировании акцент делается на декларативный подход, при котором результат определяется посредством вычисления выражений, а не выполнения команд.
Процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании)
Функциональное программирование рассматривает функции как математические объекты, которые принимают аргументы и возвращают результаты. Эти функции не имеют побочных эффектов и всегда возвращают одно и то же значение для одних и тех же входных данных.
Идеально для описания тройками Хоара
Функциональные программы легче формально верифицировать и тестировать, поскольку они не изменяют состояния программы и не зависят от порядка выполнения инструкций. Это делает их идеальными для использования с формальными методами, такими как тройки Хоара, которые позволяют доказать корректность программ.
Поддержка рекурсии и функции высшего порядка
Функциональные языки активно используют рекурсию и функции высшего порядка (функции, принимающие другие функции в качестве аргументов или возвращающие их в качестве результата), что делает их мощным инструментом для решения сложных задач.
Использование неизменяемости и выражений
В функциональном программировании состояние программы не изменяется, а создаются новые значения в результате выполнения выражений. Это упрощает параллелизм и делает код более предсказуемым и безопасным.
Примеры языков
- Haskell
- Lisp
- Erlang
- Elixir
функциональная парадигма тройки-хоара