Secondo Wikipedia:
Nella programmazione al computer, una funzione può essere descritta come pura se entrambe queste affermazioni sulla funzione sono valide: la funzione valuta sempre lo stesso valore di risultato dati gli stessi valori di argomento. Il valore del risultato della funzione non può dipendere da alcuna informazione o stato nascosto che può cambiare man mano che procede l'esecuzione del programma o tra diverse esecuzioni del programma, né può dipendere da alcun input esterno dai dispositivi I / O. La valutazione del risultato non provoca alcun effetto collaterale o output osservabile semanticamente, come la mutazione di oggetti mutabili o l'output a dispositivi I / O.
Mi chiedo se è possibile scrivere una funzione che calcoli se una funzione è pura o no. Codice di esempio in 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
, sondare la funzione più volte per un comportamento coerente non aiuta. Ma, se hai accesso alla definizione della funzione, la prova è banale.
say
chiamate console.log
che sono impure say
sono pure impure.