GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Random-Numbers.html ・ emacs-doc.conao3.com

3.10 乱数

決定論的なコンピュータプログラムでは、真の乱数を生成することはできない。ほとんどの用途では、擬似乱数で十分である。擬似乱数の系列は、決定論的な手法で生成される。これらの数値は真にランダムではないが、乱数系列を模した特定の性質を備えている。例えば、擬似乱数系列では、考えられるすべての値が等しい頻度で現れる。

擬似乱数は、シード値から生成されます。任意のシード値から開始しても、random 関数は常に同一の数列を生成します。デフォルトでは、Emacs は起動時に乱数シードを初期化するため、random の値の数列は(極めて高い確率で)Emacs の実行ごとに異なります。乱数シードは通常、システムエントロピーから初期化されますが、エントロピープールを持たない旧式のプラットフォームでは、現在時刻などのランダム性の低い揮発性データからシードが取得されます。

乱数列を再現可能にしたい場合があります。例えば、乱数列によって動作が変わるプログラムをデバッグする際、実行するたびに同じ動作が得られると便利です。乱数列を再現するには、(random "") を実行してください。これにより、お使いの Emacs 実行ファイル固有の定数にシード値が設定されます(ただし、他の Emacs ビルドでは異なる場合があります)。他の文字列を指定することで、さまざまなシード値を選択することも可能です。

関数: random &optional limit

この関数は擬似乱数の整数を返します。繰り返し呼び出すと、一連の擬似乱数の整数が返されます。

オプション引数 limit が正の整数である場合、値は非負かつ limit 未満となるように選択されます。limit が負の値である場合はエラーとなります。それ以外の場合、値は任意の fixnum、すなわち most-negative-fixnum から most-positive-fixnum までの任意の整数となり得ます(整数の基本 を参照)。

limit が文字列である場合、その文字列の内容に基づいて新しいシードを選択することを意味します。これにより、後続の random の呼び出しで再現可能な結果の系列が得られます。

limit が t である場合、Emacs が再起動するかのように新しいシードを選択することを意味します。これにより、その後の random の呼び出しで予測不能な結果が返されることになります。

limit のその他の値は、nil として解釈されます。

暗号用途でランダムなノンスが必要な場合、いくつかの理由から、random を使用するのは通常最善の方法とは言えません: