2013-01-11 38 views
1

我的印象是,在啓動Scheme之後,randomize程序以當前時間爲種子被調用。但是,如果我有一個僅由(print (random 10))組成的Scheme腳本,則我收到的唯一輸出是7;沒有其他號碼。那麼,我做錯了什麼?爲了記錄,我正在使用雞計劃。如何在Scheme中正確播種隨機函數?

回答

0

你正在使用什麼隨機庫?根據documentation你對random的播種的假設是正確的:

(randomize [SEED]):設置隨機數種子。如果未提供SEED(精確整數),則使用當前時間。在啓動時(初始化單位附加功能時),隨機數發生器用當前時間初始化。

(random N):返回[0,N-1]中的僞隨機整數。 N是整數。

還要注意的警告,尤其是第二個這似乎可以解釋的行爲,你正在見證:

警告:此過程使用蘭特(3)內部並表現出其不足之處,包括低質量的僞隨機性:

  • 在Windows和Solaris上,在[0,N-1]範圍內只能生成32768個唯一隨機值。如果N> = 32768,則結果集中會有空位。
  • 在Mac OS X,Windows和其他一些平臺上,附近種子的輸出變化很小。由於隨機發生器在啓動時以電流秒爲單位播種,因此新過程可能會看到類似或相同的隨機序列長達一分鐘。
  • 在Linux上,rand(3)是random(3)的別名,它提供合理質量的輸出。
+0

我使用內建的'random'。儘管我在Mac OS X上,但即使幾分鐘後也會出現相同的結果。 –

+0

@xuinkrbin。也許內置的隨機比看起來更令人擔憂:P。嘗試使用更大的'N'參數進行隨機選擇,或者使用[random-mtzig](http://wiki.call-cc.org/egg/random-mtzig) –