3
状態、ST、IORef、MVarの違い
私は48時間でスキーマの作成に取り組んでいます(最大で約85 時間です)、変数と割り当ての追加に関する部分にたどり着きました。この章には大きな概念的なジャンプがあります。最終的なソリューションに直接ジャンプするのではなく、2つのステップで適切なリファクタリングを行って実行したいと思います。とにかく… :私は、同じ目的を果たすように見える別のクラスの数を失ってもらいましたState、ST、IORef、とMVar。最初の3つはテキストで言及されていますが、最後の3つは、最初の3つに関する多くのStackOverflowの質問に対する好ましい回答のようです。それらはすべて、連続した呼び出しの間に状態を運ぶようです。 これらはそれぞれ何であり、どのように互いに異なるのですか? 特に、次の文は意味がありません。 代わりに、状態スレッドと呼ばれる機能を使用して、Haskellに集約状態を管理させます。これにより、関数を使用して変数を取得または設定し、他のプログラミング言語と同様に可変変数を処理できます。 そして IORefモジュールを使用すると、IOモナド内でステートフル変数を使用できます。 これらすべてにより、行がtype ENV = IORef [(String, IORef LispVal)]混乱します-なぜ2番目IORefですか?type ENV = State [(String, LispVal)]代わりに書くと何が壊れますか?