StackOverflowは私をここに指し示したので、質問は一般人の言葉では少しかもしれません。
ウィキペディアは純粋な関数を次のように定義しています
コンピュータプログラミングでは、関数に関するこれらのステートメントが両方とも成立する場合、関数は純粋な関数として記述できます。
- 関数は常に、同じ引数値が指定された同じ結果値を評価します。関数の結果値は、プログラムの実行が進むにつれて、またはプログラムの異なる実行間で変化する可能性のある非表示の情報や状態に依存したり、I / Oデバイスからの外部入力に依存したりすることはできません。
- 結果の評価は、変更可能なオブジェクトの変異やI / Oデバイスへの出力など、意味的に観察可能な副作用や出力を引き起こしません。
ただし、出典を引用しているようには見えないため、これが受け入れられた定義であるのか、誰がこのように定義したのかを判断するのは困難です。
「純粋な」関数の構文/注釈が言語に含まれているときの言語の動作を見ると、かなりいくつかの異なるアプローチがあります。
- Dでは、唯一の制限はグローバル状態の非変異です。「純粋な」関数はその引数を変更できます。
- GCCには、「純粋」の2つのタイプがあります:(
pure
副作用はありませんが、グローバルな状態を読み取ることができます)およびconst
(Wikipediaの定義に従って厳密に純粋です)。 - C#では、「目に見える状態の変更を行わない」(それが何であれ)と定義されています。
- HaskellはWikipediaの定義に従います。
だから私の質問は、純粋な関数の標準的な定義はありますか?
そして、もしあるなら、その源は何ですか?