StackOverflow m'a pointé ici, donc la question pourrait être un peu en termes simples.
Wikipedia définit les fonctions pures comme
En programmation informatique, une fonction peut être décrite comme une fonction pure si ces deux déclarations sur la fonction sont valables:
- La fonction évalue toujours la même valeur de résultat pour les mêmes valeurs d'argument. La valeur de résultat de la fonction ne peut dépendre d'aucune information ou état caché susceptible de changer au cours de l'exécution du programme ou entre différentes exécutions du programme, ni de toute entrée externe provenant de périphériques d'E / S.
- L'évaluation du résultat ne provoque aucun effet secondaire ou sortie sémantiquement observable, comme une mutation d'objets mutables ou une sortie vers des dispositifs d'E / S.
Cependant, il ne semble pas citer de sources - il est donc difficile de dire s'il s'agit d'une définition acceptée ou qui l'a définie de cette façon.
Quand je regarde ce que font les langages quand ils incluent une syntaxe / annotation pour les fonctions "pures", il y a pas mal d'approches différentes:
- En D, la seule limitation est la non-mutation de l'état global. Les fonctions "pures" peuvent muter ses arguments.
- Dans GCC, il existe deux types de "pur":
pure
(pas d'effets secondaires, mais peut lire l'état global) etconst
(strictement pur selon la définition de wikipedia). - En C # , il est défini comme "ne fait aucun changement d'état visible" (quel qu'il soit).
- Haskell suit la définition de Wikipedia.
Ma question est donc la suivante: existe-t-il une définition canonique de la fonction pure?
Et s'il y en a, quelle est sa source?