Functional programming paradigm represents the process of computation as calculation of stateless mathematical functions and thus attempts to eliminate or minimize side effects.
The concept of functions as in functional programming differs from the one used in procedural programming, and is closer to mathematical understanding: functions don’t have side effects, i.e., their result depends only on the values of their arguments and not on other factors.
Some functional languages can allow usage of local variables or side effects, but in purely functional languages such things are prohibited. Non-functional languages can apply functional paradigm in process of development as well; the benefits of immutable data and absence of side effects are worth of incorporating in real-life projects.
Functional programming is usually considered to be a sub-paradigm of declarative programming: it doesn’t matter how exactly a function is implemented as long as it returns the same value each time it is called, so the details of implementation can vary unless they don’t change the behavior of the function.
- Algol68 (dialects: Algol68 r0, Algol68 r1, Algol68 sublanguage)
- Haskell (dialects: Haskell 98)
- Lisp (dialects: Clojure, Common Lisp, Scheme)
- Standard ML
- Visual Basic (.NET)
- Wolfram Mathematica