StackOverflow me señaló aquí, por lo que la pregunta podría ser un poco simple.
Wikipedia define funciones puras como
En la programación de computadoras, una función puede describirse como una función pura si ambas afirmaciones sobre la función tienen:
- La función siempre evalúa el mismo valor de resultado dados los mismos valores de argumento. El valor del resultado de la función no puede depender de ninguna información oculta o estado que pueda cambiar a medida que avanza la ejecución del programa o entre diferentes ejecuciones del programa, ni puede depender de ninguna entrada externa de los dispositivos de E / S.
- La evaluación del resultado no causa ningún efecto secundario o salida semánticamente observable, como la mutación de objetos mutables o la salida a dispositivos de E / S.
Sin embargo, no parece citar ninguna fuente, por lo que es difícil decir si esta es una definición aceptada o quién la definió de esta manera.
Cuando miro lo que hacen los idiomas cuando incluyen una sintaxis / anotación para funciones "puras", hay varios enfoques diferentes:
- En D, la única limitación es la no mutación del estado global. Las funciones "puras" pueden mutar sus argumentos.
- En GCC hay dos tipos de "puro":
pure
(sin efectos secundarios, pero puede leer el estado global) yconst
(estrictamente puro según la definición de Wikipedia). - En C # , se define como "no realiza ningún cambio de estado visible" (sea lo que sea).
- Haskell sigue la definición de Wikipedia.
Entonces mi pregunta es: ¿hay una definición canónica de función pura?
Y si existe, ¿cuál es su fuente?