関数型プログラミング言語Haskell Part11
■ このスレッドは過去ログ倉庫に格納されています
0454デフォルトの名無しさん
2010/01/16(土) 23:27:54改めて前のページを読み返してみたところ、
State モナドで乱数を得る仕組みや意義は分かりました。
しかし、Supply で乱数を得る意義は未だに分かりません。
P.360 で、C 言語の rand 関数に相当する関数の定義例が載っていました。
rand :: IO Int
rand = getStdRandom (randomR (0, maxBound))
その後で、今まで IO モナドをできるだけ使うなと言ってきたのに、
ちょっと乱数を生成するためだけに IO モナドに引き戻されるのは残念と言い、
State モナドで乱数を生成する例が載っています。
正確に言えば、IO モナドを伴う getStdRandom 関数の代わりに、
IO モナドを伴わない random 関数を使うのですが、
この関数は乱数生成器(RandomGen)を持ち回らなければならず、
そのために State モナドを利用するという話です。
これで、IO モナドを使わずに乱数を取得できる仕組みや意義は分かりました。
しかし、Suplly モナドを利用した乱数の取得では、
その心臓部で getStdRandom 関数を使用しています。
しっかりと IO モナドに捕らえられています。
IOを使わないためというのは理由にならないような気がします。
■ このスレッドは過去ログ倉庫に格納されています