SML 日期结构
SML Date structure
我一直在尝试找出 SML 中的随机数生成。有一个标准库函数,每次计算都需要一个新的种子
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
,否则你会得到相同的随机数。找到了一种获取新号码的方法 here,但这似乎已过时,即它似乎不起作用——或者我只是没有正确使用它。
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) =
应该 "cast" 评估到变量 d
中,可以通过记录字段 #minute
和 #second
访问...一些解释将不胜感激。 (Here 是 Date
结构。)
常见问题解答非常过时,似乎使用了非常古老的 Date
结构。
这对我有用:
val seed =
let
val d = Date.fromTimeLocal(Time.now())
val m = Date.minute d
val s = Date.second d
in
Random.rand (m,s)
end;
fun random (l,h) = Random.randRange (l,h) seed;
测试:
- random (1,10);
val it = 7 : int
- random (1,10);
val it = 8 : int
- random (1,10);
val it = 7 : int
- random (1,10);
val it = 4 : int
- random (1,10);
val it = 3 : int
最近又推出了一个 SML 包管理器,smlpkg
。
是极少数可用的软件包之一
$ smlpkg add github.com/diku-dk/sml-random
我一直在尝试找出 SML 中的随机数生成。有一个标准库函数,每次计算都需要一个新的种子
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
,否则你会得到相同的随机数。找到了一种获取新号码的方法 here,但这似乎已过时,即它似乎不起作用——或者我只是没有正确使用它。
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) =
应该 "cast" 评估到变量 d
中,可以通过记录字段 #minute
和 #second
访问...一些解释将不胜感激。 (Here 是 Date
结构。)
常见问题解答非常过时,似乎使用了非常古老的 Date
结构。
这对我有用:
val seed =
let
val d = Date.fromTimeLocal(Time.now())
val m = Date.minute d
val s = Date.second d
in
Random.rand (m,s)
end;
fun random (l,h) = Random.randRange (l,h) seed;
测试:
- random (1,10);
val it = 7 : int
- random (1,10);
val it = 8 : int
- random (1,10);
val it = 7 : int
- random (1,10);
val it = 4 : int
- random (1,10);
val it = 3 : int
最近又推出了一个 SML 包管理器,smlpkg
。
$ smlpkg add github.com/diku-dk/sml-random