決定論的なコンピュータープログラムでは真の乱数を生成することはできません。しかしほとんどの目的には、疑似乱数(pseudo-random numbers)で充分です。一連の疑似乱数は決定論的な手法により生成されます。真の乱数ではありませんが、それらにはランダム列を模する特別な性質があります。たとえば疑似ランダム系では、すべての可能な値は均等に発生します。
疑似乱数はシード値(seed
value)から生成されます。与えられた任意のシードから開始することにより、random
関数は常に同じ数列を生成します。デフォルトでは、Emacsは開始時に乱数シードを初期化することにより、それぞれのEmacsの実行において、random
の値シーケンスは(ほとんど確実に)異なります。
再現可能な乱数シーケンスが欲しい場合もあります。たとえば乱数シーケンスに依存するプログラムをデバッグする場合、プログラムの各実行において同じ挙動を得ることが助けになります。再現可能なシーケンスを作成するには、(random
"")
を実行します。これは特定のEmacsの実行可能ファイルにたいして、シードに定数値をセットします(しかしこの実行可能ファイルは、その他のEmacsビルドと異なるものになるであろう)。シード値として、他のさまざまな文字列を使用することができます。
この関数は疑似乱数の整数をリターンする。繰り返し呼び出すと一連の疑似乱数の整数をリターンする。
limitが正の整数なら、値は負ではないlimit未満の値から選択される。それ以外なら値はLispで表現可能な任意のfixnum(most-negative-fixnum
からmost-positive-fixnum
の間の任意の整数)となるだろう(整数の基礎を参照)。
limitがt
なら、あたかもEmacsが再起動されたかのように新たなシード(通常はシステムエントロピー)が選択されることを意味する。これにより後でrandom
を呼び出した際に再現可能な一連の結果がリターンされるようになる。エントロピープールをもたないシステムでは、現在時刻のような乱数性に劣る揮発性データからシードを選択する。(訳注:
Unix系OSではシステムエントロピーとして/dev/randomや/dev/urandomといったエントロピープールが用いられる)。
limitが文字列なら、その文字列定数にもとづいた新しいシードを選択することを意味する。