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)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||