プログラムを書いている中で,多くの式で同じ値を使いまわしていたり,値の変化に一定のパターンが生じていることに気づくかもしれません。こういう時,式に局所的(local,ローカル)な「状態(State)」があれば,プログラムをすっきり書くことができると思うのではないでしょうか? 実際にLispにはsetf(Schemeならset!)という変数の値を書き換える機能があり,OCamlなどのML系の言語には参照型(reference type,リファレンス型)という値の再代入を許す特別な変数を扱う機能があります。 しかし,残念ながらHaskellのように純粋な関数型(purely functional)を標榜している言語には,このような書き換え可能な変数を持つことは基本的に許されていません。書き換え可能な変数があると,「状態」の更新が複数個所で共有され,「プログラムを局所的にではなく,大域的(glo
![第6回 局所的な「状態」を利用するためのStateモナド](https://cdn-ak-scissors.b.st-hatena.com/image/square/bed39b5962a5d552c95b6d796db8f55e72d32943/height=288;version=1;width=512/https%3A%2F%2Fxtech.nikkei.com%2Fimages%2Fn%2Fxtech%2F2020%2Fogp_nikkeixtech_hexagon.jpg%3F20220512)