2014-01-20 88 views
2

如何將離散值的Ada.Numerics.Discrete_Random播種?我看到這樣的代碼:Ada:播種隨機

declare 
    type Rand_Range is range 25..75; 
    package Rand_Int is new Ada.Numerics.Discrete_Random(Rand_Range); 
    seed : Rand_Int.Generator; 
    Num : Rand_Range; 
begin 
    Rand_Int.Reset(seed); 
    Num := Rand_Int.Random(seed); 
    Put_Line(Rand_Range'Image(Num)); 
end; 

其種子「Rand_Int」與「種子」的價值,但我不能找到在實際設置種子值的任何指令。或者我完全看着這個錯誤的方式?我想設置種子值爲一個數字(如4或5),我可以控制觀察測試結果。

謝謝!

+0

'Rand_Int.Reset(seed)'不會將種子生成器的seed值設爲seed。而是在某種時間相關的事物中設定了「種子」的狀態。 '種子'是*生成器*,不是*種子*;它有一個隱藏的內部狀態,用於控制對「Rand_Int.Random」的調用行爲。 –

回答

6

將第二個Integer參數傳遞給Reset。這是initiator

Rand_Int.Reset(seed, initiator); 

阿達是少數語言之一complete, detailed reference manual and rationale available free of charge。用它!另外,here is the more recent Ada version's standard

另一個注意事項:代碼中的變量名稱seed是一個可怕的選擇。像stategenerator這樣的選擇會好很多。

注:Ada在很多方面都是非常好的語言。人們對這個非常強大,細緻的類型系統抱怨不已。然後,當系統完成並運行時,首先嚐試一些缺陷,然後神祕地忘記將它歸入Ada。重要的不利方面是IDE的庫可用性和成熟度。

+0

謝謝。我發現的例子中的標籤使用'seed'作爲發生器的變量名,導致混淆。 – Squid1361