次: , 前: Math Functions, 上: Numbers


3.10 乱数

決定論的な計算機プログラムは真の乱数を発生できません。 しかし、ほとんどの目的には疑似乱数(pseudo-random numbers)で十分です。 一連の疑似乱数を決定論的な方法で生成します。 それらの数は真の乱数ではありませんが、 乱数列のある種の性質に似た性質があります。 たとえば、疑似乱数列でもすべての可能な数がしばしば等しく生起します。

Emacsでは、疑似乱数は『種』となる数から生成します。 指定した任意の種から始めても、関数randomは同じ数の列を生成します。 Emacsはつねに同じ種の値で計算し始めるため、 それぞれのEmacsの実行でもrandomは実際には同じ数の列を生成します。 たとえば、あるオペレーティングシステムで、 Emacs開始直後にrandomを呼ぶとつねに-1457731を返し、 つぎに呼ぶとつねに-7692030を返します。 このような再現性はデバッグには有利です。

予測不可能な乱数が必要ならば(random t)を実行します。 これは、現在時刻とEmacsプロセスのid番号に基づいて、 新たな種の値を選びます。

— 機能: random &optional limit

この関数は疑似乱数の整数を返す。 繰り返し呼び出すと一連の疑似乱数の整数を返す。

limitが正整数ならば、非負でlimit未満になるように値を選ぶ。

limittならば、 現在時刻とEmacsプロセスのid番号に基づいて、 新たな種の値を選ぶことを意味する。

randomの結果は、Lispにおいて表現可能な任意の整数になる計算機もある。 他の計算機では、結果はある最大値と(負数)最小値のあいだにある。