Difference between revisions of "Pure"

From HaskellWiki
Jump to navigation Jump to search
(More emphasis placed on the mathematical concept of a function)
m
Line 1: Line 1:
 
(In contrast to <i>applied</i>, when distinguishing between applied and [https://web.archive.org/web/20221204080950/https://www.maynoothuniversity.ie/mathematics-and-statistics/undergraduate-studies/why-do-research-pure-mathematics pure mathematics]; the latter being <q>divorced from the real world</q>.)
 
(In contrast to <i>applied</i>, when distinguishing between applied and [https://web.archive.org/web/20221204080950/https://www.maynoothuniversity.ie/mathematics-and-statistics/undergraduate-studies/why-do-research-pure-mathematics pure mathematics]; the latter being <q>divorced from the real world</q>.)
   
In mathematics, functions are <b>pure</b> - 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 [[Referential transparency|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. This is in contrast to <i>procedures</i> or <i>subroutines</i> that, for example, could also:
+
In mathematics, functions are <b>pure</b> - 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 [[Referential transparency|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, <i>procedures</i> or <i>subroutines</i> are more complicated - for example, they could also:
   
 
* read from or write to [[Global variables|global variables]],
 
* read from or write to [[Global variables|global variables]],

Revision as of 12:03, 15 April 2024

(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 - see also: