diff --git "a/\346\225\260\345\200\244/\344\271\261\346\225\260\343\202\222\345\276\227\343\202\213.md" "b/\346\225\260\345\200\244/\344\271\261\346\225\260\343\202\222\345\276\227\343\202\213.md" index 410d723..235fd46 100644 --- "a/\346\225\260\345\200\244/\344\271\261\346\225\260\343\202\222\345\276\227\343\202\213.md" +++ "b/\346\225\260\345\200\244/\344\271\261\346\225\260\343\202\222\345\276\227\343\202\213.md" @@ -139,6 +139,39 @@ getStdGen :: IO StdGen ##### IO内で簡単に乱数を取得する +乱数の種を更新しながら、 +乱数をひとつずつ取り出すには、つぎのように実行します。 + +```haskell +-- random +> :module System.Random +> getStdGen +551091070 1 +> random it :: (Int, StdGen) +(7702268877985608548,1221636208 2103410263) +> setStdGen $ snd it +> getStdGen +1221636208 2103410263 +> random it :: (Int, StdGen) +(6127740995264203513,8356773621 1780294415) +> setStdGen $ snd it +``` + +IO値getStdGenで現在、システムに保存されている乱数の種を取得し、 +関数randomでランダムな値と、新しい乱数の種を計算します。 +そして、関数setStdGenを使って、新しい乱数の種をシステムに保存します。 + +このような動きをまとめたのがIO値randomIOです。 + +```haskell +> randomIO :: IO Int +7202189668116739859 +> randomIO :: IO Int +8741390758431768255 +``` + +IO値randomIOは、手軽に乱数値を取得できる便利な値です。 + ##### 乱数の範囲を指定する ##### 乱数の種をふたつにわける