Probability Monad (あきらめ)
今日はまじめに論文を読んでて疲れたので、気分転換に昔どっかでみた"確率モナド"みたいなものを実装してみようと思った。けどめんどくさくなったのでモナドにするのはあきらめて、 select という関数を作って代用してみた。まぁ、それなりにそれっぽく書けるようである。
import System.Random (randomRIO) import Data.List (sort, group) select list = do n <- randomRIO (0, length list - 1) return $ list!!n dice = select [1..6] sumOf2Dices = do x <- dice y <- dice return $ x+y simulate n = do x <- mapM (const sumOf2Dices) [1..n] return $ zip [2..12] $ map length $ group $ sort x visualize x = mapM_ f x where f (a,b) = putStrLn $ show a ++ ": "++replicate b '*' check x = simulate x >>= visualize
Main> check 300 2: ******** 3: ************* 4: ************************* 5: ***************************** 6: **************************************** 7: **************************************************** 8: ********************************************** 9: ********************************* 10: ************************* 11: ***************** 12: ************ Main>