Парадигма: функциональная
Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании (то есть тех, чей единственный результат работы заключается в возвращаемом значении, или другими словами, вычисление которых не имеет побочного эффекта). Противопоставляется парадигме императивного программирования, в которой исполнителю программы предписывается последовательность выполняемых действий, в то время, как в функциональном программировании способ решения задачи описывается при помощи зависимости функций друг от друга (в том числе возможны рекурсивные зависимости), но без указания последовательности шагов.
Одной из близких парадигм программирования является логическое программирование, в котором программа представляет собой множество пар (логическое условие, новые факты). В логическом программировании, также как и в функциональном программировании, программист остается в неведении о методах, применяемых при вычислении, и последовательности исполнения элементарных действий. Большая часть ответственности за эффективность вычислений в логическом и функциональном программировании перекладывается на «плечи» транслятора используемого языка программирования.
Функциональное и логическое программирование являют собой части т. н. «декларативного программирования», т. е. такого стиля программирования, при использовании которого в программах описывается способ решения поставленной задачи, а не предписываются шаги для получения результата.
Функциональное программирование основано на теориях λ-исчисления (Алонзо Чёрч, 1936) и комбинаторной логики (Моисей Исаевич Шейнфинкель и Хаскелл Карри).
- A++
- Agda
- APL
- Cat
- Dylan
- ECMAScript (диалекты: ActionScript, JavaScript)
- Erlang
- F#
- Factor
- Falcon
- FP
- Funky
-
Haskell
(диалекты:
Haskell 98,
O'Haskell)
- GHC
- Gofer
- HBI и HBC
- Haskell++
- Helium
- Hugs
- Hugs98 for .NET
- Jaskell
- Jhc
- O'Hugs
- Template Haskell
- YHC
- Yale Haskell
-
nhc98
- nhc98 1.04
- nhc98 1.06
- nhc98 1.08
- nhc98 1.10
- nhc98 1.12
- nhc98 1.14
- nhc98 1.14a
- nhc98 1.16
- nhc98 1.18
- nhc98 pre-release 1
- nhc98 pre-release 10
- nhc98 pre-release 11
- nhc98 pre-release 12
- nhc98 pre-release 13
- nhc98 pre-release 14
- nhc98 pre-release 15
- nhc98 pre-release 16
- nhc98 pre-release 17
- nhc98 pre-release 18
- nhc98 pre-release 19
- nhc98 pre-release 2
- nhc98 pre-release 3
- nhc98 pre-release 4
- nhc98 pre-release 5
- nhc98 pre-release 6
- nhc98 pre-release 7
- nhc98 pre-release 8
- nhc98 pre-release 9
- nhc98 release 1.00
- nhc98 release 1.02
- ISWIM
- J
- K
- KRC
- Lisp (диалекты: Clojure, Common Lisp, Lisp Machine Lisp, Scheme)
- Logo
- Lua
- LUX
- Mercury
- Miranda
-
ML
(диалекты:
CAML,
Standard ML)
- Caml Light
- Caml Special Light
- Dependent ML
- Edinburgh ML
- Extended ML
- GAML
- HaMLet
- HaMLet S
- Heavy CAML
- Lazy ML
- ML Kit
- MLj
- MLton
- MOSCOW ML
- MicroML
-
Objective CAML
- Objective Caml 1.00
- Objective Caml 1.01
- Objective Caml 1.02
- Objective Caml 1.03
- Objective Caml 1.04
- Objective Caml 1.05
- Objective Caml 1.06
- Objective Caml 1.07
- Objective Caml 2.00
- Objective Caml 2.01
- Objective Caml 2.02
- Objective Caml 2.03
- Objective Caml 2.04
- Objective Caml 3.00
- Objective Caml 3.01
- Objective Caml 3.02
- Objective Caml 3.03 ALPHA
- Objective Caml 3.04
- Objective Caml 3.05
- Objective Caml 3.06
- Objective Caml 3.07
- Objective Caml 3.08.0
- Objective Caml 3.08.1
- Objective Caml 3.08.2
- Objective Caml 3.08.3
- Objective Caml 3.08.4
- Objective Caml 3.09.0
- Objective Caml 3.09.1
- Objective Caml 3.09.2
- Objective Caml 3.09.3
- Objective Caml 3.10.0
- Objective Caml 3.10.2
- Poly/ML
- SML#
- SML.NET
-
SML/NJ
- SML/NJ 110.41
- SML/NJ 110.43
- SML/NJ 110.40
- SML/NJ 110.42
- SML/NJ 110.44
- SML/NJ 110.45
- SML/NJ 110.46
- SML/NJ 110.47
- SML/NJ 110.48
- SML/NJ 110.49
- SML/NJ 110.50
- SML/NJ 110.51
- SML/NJ 110.52
- SML/NJ 110.53
- SML/NJ 110.54
- SML/NJ 110.55
- SML/NJ 110.56
- SML/NJ 110.57
- SML/NJ 110.58
- SML/NJ 110.59
- SML/NJ 110.60
- SML/NJ 110.61
- SML/NJ 110.62
- SML/NJ 110.63
- SML/NJ 110.63.1
- SML/NJ 110.63.2
- SML/NJ 110.64
- SML/NJ 110.65
- SML/NJ 110.69
- SMLtoJs
- Successor ML
- TILT
- sml2c
- Nemerle
- Nimrod
- Objeck
- Opa
- Oz (диалекты: Mozart)
- Perl
- PHP
- Pike
- PowerShell
- R
- REXX
- Rust
- SASL
-
Scala
-
Scala for JVM
- Scala 1.0.0-b2
- Scala 1.0.0-b4
- Scala 1.0.0-b5
- Scala 1.0.0-b6
- Scala 1.0.0-b8
- Scala 1.1.0-b1
- Scala 1.1.0-b3
- Scala 1.1.1.0
- Scala 1.1.1.3
- Scala 1.2.0.0
- Scala 1.2.0.1
- Scala 1.3.0.10
- Scala 1.3.0.2
- Scala 1.3.0.3
- Scala 1.3.0.4
- Scala 1.3.0.7
- Scala 1.3.0.9
- Scala 1.4.0.0
- Scala 1.4.0.1
- Scala 1.4.0.2
- Scala 1.4.0.3
- Scala 1.4.0.4
- Scala 2.0.0
- Scala 2.1.0
- Scala 2.1.1
- Scala 2.1.2
- Scala 2.1.3
- Scala 2.1.4
- Scala 2.1.5
- Scala 2.1.6
- Scala 2.1.7
- Scala 2.1.8
- Scala 2.2.0
- Scala 2.3.0
- Scala 2.3.1
- Scala 2.3.2
- Scala 2.3.3
- Scala 2.4.0-final
- Scala 2.5.0-final
- Scala 2.5.1-final
- Scala 2.6.0-final
- Scala 2.7.7-final
- Scala 2.8.0-final
-
Scala for JVM
- SNOBOL
- Tcl
- Wolfram Mathematica