6

Haskell の純粋な関数が変数のローカル コピーを変更することは可能ですか? 関数型プログラミングは詐欺です! 、デビッド・ノーレン?そうでない場合、これの理由は何ですか?もしそうなら、誰かが私に指摘できる例はありますか?

呼び出し元には純粋に見えるが、内部的にミューテーションを使用する関数で同様の質問がなされました。一般的なコンセンサスは、ミューテーションが変数のローカル コピーに対して実行される限り (つまり、効果の変異は関数をエスケープせず、非局所的な効果があります)。

リストを変更しないShen ( Local Mutation, global Mutation, mutable datastructures , Bubblesort in Qi )のバブルソートを Common Lisp に翻訳し、変更する Common LispBubblesortのバブルソートと比較すると、疑問が生じました。リスト。その結果、(Common Lisp では) リストを変更したバージョンは、非常に大きなリストの場合、リストを変更しなかったバージョンよりも大幅に高速であることがわかりました。

4

1 に答える 1

12

STモナドは、変更可能な操作を純粋なコード内に安全に埋め込むためのものです。型システムを利用して、変更されたデータがスコープから逃れることができないようにするため、プログラム全体をステートフルにする危険 (参照透過性を破壊したり、競合状態を導入したりする可能性があります) なしに、ローカルの変更可能な状態の力を得ることができます。

ST モナドに関するドキュメント:

于 2013-10-13T13:08:17.463 に答える