Как разбить генератор случайных чисел SML/NJ на машину Windows?Сеяние RNG SML/NJ на машине Windows
Функция Random.rand() берет пару целых чисел и использует их для засева генератора случайных чисел. Основываясь на моем опыте работы с другими языками программирования, я бы ожидал, что будет относительно простой способ засеять его на основе системных часов (что-то вроде srand(time(null));
в C). Если я не упускаю из виду что-то очевидное, похоже, что нет простого способа, по крайней мере, если вы используете Windows.
Ближайший Я могу найти time(null)
в SML is Posix.ProcEnv.time, который возвращает эпоху эпохи Unix. К сожалению, структуры Posix
не являются частью загрузки Windows, а структура Windows (которая есть), похоже, не содержит прямого аналога time
.
Структура Timer имеет способы определения истек в реальном времени. Я мог бы написать функцию, которая составляет около полусекунды бессмысленного вычисления, время, необходимое для этого, и выяснить способ извлечь из него пару целых чисел. Но: 1) это очень много работы для чего-то, что тривиально в большинстве языков, 2) что более важно - похоже, это может привести к повторному использованию одного и того же семени в нетривиальном проценте времени.
Еще одна идея, которую я имел, это то, что если бы я мог получить доступ к переменной среды Windows "TIME"
, я мог бы ее использовать. Следующее отпечатывает время на замену:
OS.Process.system "TIME/T";
но не предоставляет программный доступ к печатной строке.
OS.Process.getEnv "TIME";
звучит многообещающе, но возвращает NONE
.
Если в SML/NJ действительно нет простого решения - существуют ли опции, которые работают для некоторых других реализаций SML, таких как Poly/ML?
Это должно сработать. Странно думать, что я взглянул на «Время» более одного раза, но не заметил этого. У меня создалось впечатление, что «Время» было разработано для синтаксического анализа значений, возвращаемых с «Таймера», но в этом не было данных о часах. –
Я пропустил это тоже в обычной документации, обновит ответ, чтобы отразить его стандартную функцию – matt