Selon Wikipedia:
En programmation informatique, une fonction peut être décrite comme pure si ces deux déclarations sur la fonction sont valables: La fonction évalue toujours la même valeur de résultat pour la ou 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.
Je me demande s'il est possible d'écrire une fonction qui calcule si une fonction est pure ou non. Exemple de code en Javascript:
function sum(a,b) {
return a+b;
}
function say(x){
console.log(x);
}
isPure(sum) // True
isPure(say) // False
if (rand(1000000)<2) return WRONG_ANSWER
, sonder la fonction plusieurs fois pour un comportement cohérent n'aidera pas. Mais, si vous avez accès à la définition de fonction, la preuve est triviale.
say
appels console.log
qui sont donc say
impurs le sont aussi.