乱数

Haskell での乱数の使い方の確認のために。でもこれだと種が同じなので毎回答えが一緒。普通の乱数が使いたければ System.Random.getStdRandom とかを使えばいいが、もちろん IO がつく。

import System.Random (randomRs, mkStdGen)
import System (getArgs)
rList = randomRs (0.0,1.0) (mkStdGen 0)
monte_pi count = monte 0 0 rList * 4 / count
    where
      monte c n (x:y:rest) | count == c  = n
                           | x*x+y*y < 1 = monte (c+1) (n+1) rest
                           | otherwise   = monte (c+1) n     rest
main = do (c:_) <- getArgs
          print $ monte_pi $ read c
% ./random 100000
3.14516
%