Haskell   乱数

ホーム   目次


乱数の覚書です。


import Control.Monad
import System.Random

main :: IO ()
main = do
    forM_ [1..100] $ \_ -> onPoint
    putStrLn ""
    where
        onPoint :: IO ()
        onPoint = do
            x <- (getStdRandom $ randomR (0, 100) :: IO Int)
            --y <- (getStdRandom $ randomR (0, 100) :: IO Int)
            --print (x, y)
            --print (x)
            putStr (show x)
            putStr " "
    
*Main> main
33 20 53 98 78 54 44 75 60 25 72 65 6 69 20 88 73 14 52 20 60 50 47 32 50 69 91 7 22 43 41 72 77 81 80 32 12 4 24 90 26 21 23 85 16 56 4 83 69 27 6 10 2 80 73 94 61 66 38 8 34 44 71 48 93 82 76 50 54 9 89 68 51 12 89 22 19 23 97 38 61 69 15 100 100 37 59 39 13 62 7 20 84 53 6 96 65 96 24 75
*Main>

実行結果は、毎回違います。

Haskellは、型推論ができる言語ですが、randomRで数値を指定する場合は「型注釈」と呼ばれる、型の指定が必要になります。

:: IO Int
型注釈は上記のように式の末尾に簡易的に記述することもできますが、次のように識別子の上に記述するのが基本形です。


import Control.Monad
import System.Random

main :: IO ()
main = do
    forM_ [1..100] $ \_ -> onPoint
    putStrLn ""
    where
        onPoint = do
            x <- random
            putStr (show x)
            putStr " "
        random :: IO Int
        random = getStdRandom $ randomR (0, 100)
    
*Main> main
18 4 6 17 53 32 41 78 18 42 37 3 4 100 15 80 52 68 11 91 33 31 1 81 43 48 44 93 24 8 35 30 64 73 47 61 28 91 63 96 45 79 61 21 50 29 22 32 17 64 51 74 88 26 40 81 78 51 22 63 38 74 91 18 87 72 19 81 95 36 32 64 57 57 97 32 82 84 91 65 84 34 33 1 59 88 19 52 26 51 31 57 74 56 12 23 67 27 93 37
*Main>

実行結果は、毎回違います。


12765 visits
Posted: Jan. 14, 2019
Update: Jan. 22, 2019

ホーム   目次   ページトップ