Pure
(In contrast to applied, when distinguishing between applied and pure mathematics; the latter being divorced from the real world
.)
In mathematics, functions are pure - they merely associate each possible input value with an output value, and nothing more. In Haskell, most functions uphold this principle. As a result, they usually are referentially transparent - each of them does not depend on anything other than its parameters, so when invoked in a different context or at a different time with the same arguments, it will produce the same result. In comparison, procedures or subroutines are more complicated - for example, they could also:
- read from or write to global variables,
- send data to a file,
- or print to a screen.
A programming language may sometimes be known as purely functional if:
- it only permits programs to be defined in terms of pure definitions,
- and functions are its primary means of abstraction.
However there has been some debate in the past as to the precise meaning of these terms:
- What is a Purely Functional Language? a 1993 paper which presents a proposed formal definition of the concept,
- The C language is purely functional (some satire intended),
- Is Haskell a purely functional language?
- Purity vs Referential transparency, Stack Overflow.
See also
- The [[pure]] attribute, JTC1.22.32 Programming Language Evolution Working Group (2015).