Zgodnie z Wikipedią:
W programowaniu komputerowym funkcję można opisać jako czystą, jeśli obie instrukcje dotyczące funkcji hold: Funkcja zawsze ocenia tę samą wartość wyniku, biorąc pod uwagę te same wartości argumentu. Wartość wyniku funkcji nie może zależeć od żadnych ukrytych informacji lub stanów, które mogą się zmieniać w trakcie wykonywania programu lub między różnymi wykonaniami programu, ani też nie może zależeć od jakichkolwiek zewnętrznych danych wejściowych z urządzeń I / O. Ocena wyniku nie powoduje semantycznie obserwowalnego efektu ubocznego lub wyjścia, takiego jak mutacja obiektów podlegających mutacji lub wyjście do urządzeń I / O.
Zastanawiam się, czy można napisać funkcję obliczającą, czy funkcja jest czysta, czy nie. Przykładowy kod w 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
, wielokrotne sprawdzanie funkcji pod kątem spójnego zachowania nie pomoże. Ale jeśli masz dostęp do definicji funkcji, dowód jest trywialny.
say
wywołania, console.log
które są nieczyste, są zatem say
również nieczyste.