このパッケージは、Common Lisp乱数ジェネレータの実装も提供する。独自の 付加適合的アルゴリズムを使っており、多くの オペレーティングシステムによって提供される単純なジェネレータよりも、 ずっと統計的にきれいな乱数をおそらく与える。
この関数は、numberより小さく同じ型(整数か浮動小数点数のどちらか)
の、負でない乱数を戻す。state引数は乱数ジェネレータの状態を保持
するrandom-state
オブジェクトでなければならない。この関数は
副作用として、この状態オブジェクトを修正する。stateが省略された
場合、変数*random-state*
を既定とする。*random-state*
は、
あらかじめ初期化されたrandom-state
オブジェクトを含む。
この変数は、システム“既定”のrandom-state
オブジェクトを含み、
代替の状態オブジェクトを指定しないrandom*
への呼び出しのために
使われる。Emacsプロセス内の任意の数のプログラムは、さしはさむような
仕方で*random-state*
にアクセスしてもよいので、この変数から
生成される列は、意図や用途にかかわらず再現不能になるだろう。
この関数は、random-state
オブジェクトを作成またはコピーする。
stateが省略されるかnil
の場合、新しい*random-state*
のコピーを戻す。これは、(random* n)
と
(random* n s)
(sは新しい
ランダムステートオブジェクト)の呼び出しの将来の列は同一の乱数列を
戻すという意味でコピーである。
stateがrandom-state
オブジェクトの場合、この関数はその
オブジェクトのコピーを戻す。stateがt
の場合、この関数は
日時を種とする新しいrandom-state
オブジェクトを戻す。Common Lisp
への拡張として、stateは整数であってもよく、その場合は新しい
オブジェクトはその整数を種とする; それぞれ異なる整数の種は、完全に
異なる乱数列を生じるだろう。
random-state
オブジェクトをバッファまたはファイルに印字して、
後にread
で読み戻すことは正しい。プログラムが、デバッグ用に後に
再現させられるような疑似乱数の列を使いたい場合、新しい列を
取得するために(make-random-state t)
を呼び出して、後にこの列を
ファイルへ印字することができる。プログラムが後で再実行される場合、
ファイルからオリジナルな実行のランダムステートを読むことができる。
この述語は、objectがrandom-state
オブジェクトの場合に
t
を、さもなければnil
を戻す。