Я пытался выяснить генерацию случайных чисел в SML. Есть стандартная библиотечная функция, которая требует начального числа sh для каждого вычисления
let
val seed = Random.rand (123,456)
in
List.tabulate(5, fn i => Random.randRange (1,100) seed)
end
val it = [26,39,64,39,84] : int list
. Это работает нормально, но если вы не обновите seed
новой парой чисел каждый раз, вы получите то же самое случайные числа. Один из способов получения новых чисел был найден здесь , но это кажется устаревшим, то есть, похоже, оно не работает - или я просто не правильно его использую.
val seed =
let
val Date.DATE(d) = Date.fromTime(Time.now())
val m = #minute d
val s = #second d
in
m,s)
end
fun random (l,h) = Random.randRange (l,h) seed
В частности, я не могу заставить
val Date.DATE(d) = Date.fromTime(Time.now())
работать. Я пытался
- val Date.DATE(d) = Date.fromTimeLocal(Time.now());
, но я получаю ошибку
stdIn:7392.1-7392.10 Error: unbound variable or constructor: DATE in path Date.DATE
stdIn:7392.1-7392.10 Error: variable found where constructor is required: Date.DATE
stdIn:7392.1-7392.12 Error: constant constructor applied to argument in pattern:bogus
Это, однако, работает
- val mydate = Date.fromTimeLocal(Time.now())
val mydate =
: DATE
: {day=17,hour=22,isDst=SOME true,minute=27,month=Apr,
: offset=SOME (TIME {usec=#}),second=3,wday=Fri,yday=107,year=2020}
: : Date.date
, но как новичок я не действительно знаю, как извлечь что-нибудь из mydate
. Кажется, что Date.DATE(d) =
должен «преобразовать» оценку в переменную d
, к которой могут обращаться поля записи #minute
и #second
... Некоторое объяснение было бы очень полезно. ( Здесь - это структура Date
.)