Next: , Previous: , Up:   [Contents][Index]


8.3 乱数

このパッケージは、Common Lisp乱数ジェネレータの実装も提供する。独自の 付加適合的アルゴリズムを使っており、多くの オペレーティングシステムによって提供される単純なジェネレータよりも、 ずっと統計的にきれいな乱数をおそらく与える。

Function: random* number &optional state

この関数は、numberより小さく同じ型(整数か浮動小数点数のどちらか) の、負でない乱数を戻す。state引数は乱数ジェネレータの状態を保持 するrandom-stateオブジェクトでなければならない。この関数は 副作用として、この状態オブジェクトを修正する。stateが省略された 場合、変数*random-state*を既定とする。*random-state*は、 あらかじめ初期化されたrandom-stateオブジェクトを含む。

Variable: *random-state*

この変数は、システム“既定”のrandom-stateオブジェクトを含み、 代替の状態オブジェクトを指定しないrandom*への呼び出しのために 使われる。Emacsプロセス内の任意の数のプログラムは、さしはさむような 仕方で*random-state*にアクセスしてもよいので、この変数から 生成される列は、意図や用途にかかわらず再現不能になるだろう。

Function: make-random-state &optional state

この関数は、random-stateオブジェクトを作成またはコピーする。 stateが省略されるかnilの場合、新しい*random-state* のコピーを戻す。これは、(random* n)(random* n s)(sは新しい ランダムステートオブジェクト)の呼び出しの将来の列は同一の乱数列を 戻すという意味でコピーである。

staterandom-stateオブジェクトの場合、この関数はその オブジェクトのコピーを戻す。statetの場合、この関数は 日時を種とする新しいrandom-stateオブジェクトを戻す。Common Lisp への拡張として、stateは整数であってもよく、その場合は新しい オブジェクトはその整数を種とする; それぞれ異なる整数の種は、完全に 異なる乱数列を生じるだろう。

random-stateオブジェクトをバッファまたはファイルに印字して、 後にreadで読み戻すことは正しい。プログラムが、デバッグ用に後に 再現させられるような疑似乱数の列を使いたい場合、新しい列を 取得するために(make-random-state t)を呼び出して、後にこの列を ファイルへ印字することができる。プログラムが後で再実行される場合、 ファイルからオリジナルな実行のランダムステートを読むことができる。

Function: random-state-p object

この述語は、objectrandom-stateオブジェクトの場合に tを、さもなければnilを戻す。