ウィキペディアによると:
コンピュータープログラミングでは、関数に関するこれらのステートメントの両方が成立する場合、関数は純粋であると説明できます。関数は、同じ引数値が与えられると常に同じ結果値を評価します。関数の結果値は、プログラムの実行が進むにつれて、またはプログラムの異なる実行間で変化する可能性のある隠された情報や状態に依存することも、I / Oデバイスからの外部入力に依存することもできません。結果を評価しても、可変オブジェクトの変更やI / Oデバイスへの出力など、意味的に観察可能な副作用や出力は発生しません。
関数が純粋であるかどうかを計算する関数を書くことができるかどうか疑問に思っています。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
、一貫した動作のために関数を何度もプローブしても役に立ちません。ただし、関数定義にアクセスできる場合、証明は簡単です。
say
呼び出しも不純です。console.log
say