2014-01-20 3 views
2

Как я могу посеять Ada.Numerics.Discrete_Random с дискретным значением? Я вижу код, как:Ada: Seeding Random

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' является * генератором *, а не * seed *; он имеет скрытое внутреннее состояние, которое управляет поведением вызовов на «Rand_Int.Random». –

ответ

6

Пропустить второй аргумент Integer до Reset. Вот он initiator.

Rand_Int.Reset(seed, initiator); 

Ada является одним из немногих языков с complete, detailed reference manual and rationale available free of charge. Используй это! Кроме того, here is the more recent Ada version's standard.

Другое примечание: переменное имя seed в вашем коде является ужасным выбором. Выбор вроде state или generator был бы намного лучше.

NB: Ада действительно очень хороший язык во многих отношениях. Люди сталкиваются с очень сильной, детализированной системой типов. Затем, когда система выполнена и она запускается сперва, попробуйте с несколькими ошибками, они загадочно забывают приписывать ее Аде. Значительные стороны - доступность и зрелость библиотеки IDE.

+0

Спасибо. Ярлык в примерах, которые я нашел, использовал «seed» в качестве имени переменной для генератора, что приводило к путанице. – Squid1361

Смежные вопросы