乱数
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 %