randomに種を仕込む

どう書く?org に投稿してみました。

http://ja.doukaku.org/4/#41

うゎ、スペルミスしてたorz. loosers → losers 敗者のつもりが、ゆるい人達になってしまっていた。英語力がバレてしまいました。

書いてるときに気付いたんですが、以下のファイルを用意して、

random.cl

(print *random-state*)

何度か実行してみると、

$ clisp random.cl
#S(random-state #*0010111011111010100001011101100110001101110011101101011111010111)
$ clisp random.cl
#S(random-state #*0010111011111010100001011101100110001101110011101101011111010111)
$ clisp random.cl
#S(random-state #*0010111011111010100001011101100110001101110011101101011111010111)

*random-state*の初期値は変わりませんでした。

random関数は、この*random-state*を元にして疑似乱数を発生させるので、他の言語と同じように乱数は用途によっては種(seed)を仕込まないといけないようです。

HyperSpecを見ながら、試行錯誤してみた結果、*random-state*に依存しない乱数の生成は以下で良いようでした。

(random 10 (make-random-state t))

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください