A function is called pure if it corresponds to a function in the mathematical sense: it associates each possible input value with an output value, and does nothing else. In particular,
- it has no side effects, that is to say, invoking it produces no observable effect other than the result it returns; it cannot also e.g. write to disk, or print to a screen.
A pure function is trivially referentially transparent - it 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.
A programming language may be called purely functional if evaluation of expressions is pure.
There has been some debate in the past as to the precise meaning of these terms. See also:
- 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.