1

私は、Scheme の起動randomize時に、現在の時刻をシードとしてプロシージャーが呼び出されたという印象を受けました。ただし、Scheme スクリプトが のみで構成されている場合、(print (random 10))受け取る出力は7;のみです。他の番号はありません。それで、私は何を間違っていますか?記録のために、私は Chicken Scheme を使用しています。

4

1 に答える 1

0

正確には、どのランダムライブラリを使用していますか?ドキュメントによると、のシードに関するあなたの仮定randomは正しいです:

(randomize [SEED]):乱数シードを設定します。SEED(正確な整数)が指定されていない場合は、現在の時刻が使用されます。起動時(ユニットエクストラが初期化されるとき)、乱数ジェネレーターは現在の時刻で初期化されます。

(random N):[0、N-1]の疑似乱数整数を返します。Nは整数です。

また、警告、特にあなたが目撃している行動を説明しているように見える2番目の警告にも注意してください。

警告:この手順では、内部でrand(3)を使用し、低品質の疑似ランダム性などの欠点を示します。

  • WindowsおよびSolarisでは、[0、N-1]の範囲で生成できる一意のランダム値は32768のみです。N> = 32768の場合、結果セットにギャップがあります。
  • Mac OS X、Windows、およびその他のいくつかのプラットフォームでは、近くのシードで出力にほとんど変化が見られません。ランダムジェネレーターには起動時にcurrent-secondsがシードされるため、新しいプロセスでは、最大1分間、類似または同一のランダムシーケンスが表示される場合があります。
  • Linuxでは、rand(3)はrandom(3)のエイリアスであり、妥当な品質の出力を提供します。
于 2013-01-11T16:19:21.527 に答える