Edited at

Haskellで簡単に乱数を使ってみる

More than 1 year has passed since last update.

Haskellで乱数というとすぐにStdGenが出てきて面倒くさいイメージがありますが

再現性を気にせず手軽にランダムな値が欲しいだけなら難しいことを考える必要はありません

以下はモンテカルロ法で円周率を求めるプログラムです。

乱数生成に使っているのはSystem.RandomrandomRIOというRandomクラスのメソッドです

import System.Random

trial :: Int -> IO Int
trial inner = do
x <- randomRIO (0, 1) :: IO Double
y <- randomRIO (0, 1) :: IO Double
if x ^ 2 + y ^ 2 <= 1
then return (inner + 1)
else return inner

experience :: [IO Int]
experience = iterate (>>= trial) (return 0)

main = do
inner <- experience !! 10000
print $ 4 * (fromIntegral inner) / 10000

これでx, yには0から1までのランダムなDoulbeの値が入ります