人気ブログランキング | 話題のタグを見る

System.Random (10) System.Random モジュール

System.Random 読解シリーズ

System.Random モジュールのソースコードの先頭部分から順番に読解していくことにする。短いモジュールで、アルゴリズム的にも擬似乱数の発生法以外にはそう難しいものはないような感じなので、GHCの標準モジュールを解読する際のモデルになるのではないだろうか。

System.Random モジュールのエクスポートは次のようになる。

module System.Random
        (

        -- $intro

        -- * Random number generators

         RandomGen(next, split, genRange)

        -- ** Standard random number generators
        , StdGen
        , mkStdGen

        -- ** The global random number generator

        -- $globalrng

        , getStdRandom
        , getStdGen
        , setStdGen
        , newStdGen

        -- * Random values of various types
        , Random ( random, randomR,
                 randoms, randomRs,
                 randomIO, randomRIO )

        -- * References
        -- $references

        ) where

System.Random のエクスポートの中にはたくさんのコメントが並んでいるが、これらは Haddock の System.Random のページの見出しに対応している。 -- * や --** は見出しの階層のレベルに対応している。 -- $intro や -- $globalrng の部分はソースの他の部分で定義された文字列置換される。たとえば $globalrng は次の文章に置換される。

{- $globalrng #globalrng#

There is a single, implicit, global random number generator of type
'StdGen', held in some global variable maintained by the 'IO' monad. It is
initialised automatically in some system-dependent fashion, for example, by
using the time of day, or Linux's kernel random number generator. To get
deterministic behaviour, use 'setStdGen'.
-}

$intro に対応する定義はないが、冒頭の部分に置換されるようだ。

また、クラスや関数などの entity の Hadock での表記は、ソースコードから抽出して表示されるようだ。そのさいに、entity の上部に書かれているコメントは、Haddock の注釈として表示される。

たとえは class RadomGen g の場合は、そのクラスについての概要に続いて、Method という見出しのもとにそのクラスのメソッドである next, split, genRange がその注釈とともにまとめられている。また、このクラスの Instance の見出しの後には、このソースコードで定義されている RandomGen クラスの唯一のインスタンスである StdGen 型の定義へのリンクが表示されている。

ソースコードの各 entity の概要は、このように Haddock に忠実に反映されるので、Haddock を参照しながら各 entity のアルゴリズムの本体を読解していけばいい。
by tnomura9 | 2015-02-14 13:30 | Haskell | Comments(0)
<< System.Random(1... System.Random ... >>