1
我的印象是,在啓動Scheme之後,randomize
程序以當前時間爲種子被調用。但是,如果我有一個僅由(print (random 10))
組成的Scheme腳本,則我收到的唯一輸出是7
;沒有其他號碼。那麼,我做錯了什麼?爲了記錄,我正在使用雞計劃。如何在Scheme中正確播種隨機函數?
我的印象是,在啓動Scheme之後,randomize
程序以當前時間爲種子被調用。但是,如果我有一個僅由(print (random 10))
組成的Scheme腳本,則我收到的唯一輸出是7
;沒有其他號碼。那麼,我做錯了什麼?爲了記錄,我正在使用雞計劃。如何在Scheme中正確播種隨機函數?
你正在使用什麼隨機庫?根據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)的別名,它提供合理質量的輸出。
我使用內建的'random'。儘管我在Mac OS X上,但即使幾分鐘後也會出現相同的結果。 –
@xuinkrbin。也許內置的隨機比看起來更令人擔憂:P。嘗試使用更大的'N'參數進行隨機選擇,或者使用[random-mtzig](http://wiki.call-cc.org/egg/random-mtzig) –