Conforme Wikipedia:
Na programação de computadores, uma função pode ser descrita como pura se ambas as afirmações sobre a função se mantiverem: A função sempre avalia o mesmo valor de resultado, dados os mesmos valores de argumento. O valor do resultado da função não pode depender de nenhuma informação ou estado oculto que possa mudar à medida que a execução do programa prossegue ou entre diferentes execuções do programa, nem pode depender de nenhuma entrada externa de dispositivos de E / S. A avaliação do resultado não causa nenhum efeito colateral ou saída semanticamente observável, como mutação de objetos mutáveis ou saída para dispositivos de E / S.
Gostaria de saber se é possível escrever uma função que calcule se uma função é pura ou não. Exemplo de código em 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
, investigar a função várias vezes para obter um comportamento consistente não ajudará. Mas, se você tiver acesso à definição da função, a prova é trivial.
say
as chamadas console.log
que é impuro, assim, say
é impuro também.