datetime - SML 日期结构
问题描述
我一直试图弄清楚 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
每次都用一个新的数字对更新,否则你会得到相同的随机数。在这里找到了一种获取新数字的方法,但这似乎已经过时,即它似乎不起作用——或者我只是没有正确使用它。
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
结构。)
解决方案
常见问题解答非常过时,似乎使用了非常古老的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
推荐阅读
- python - 如何在 Vispy 3d 图中获取点的位置?
- jquery - 在当前选择的选项之前获取选择框选项
- node.js - Socket.IO adding connection when refreshing browser
- javascript - 在 jquery 中获取选项标签文本
- arm - 复位后的 ARM PC 值
- sql - bigrquery 中的 percentile_cont
- json - 在rest api yii2中返回html
- vhdl - 具有两个输入和一个输出的 Mealy 机器的 VHDL 代码
- azure - 如何编码以句点结尾的 blob 名称?
- php - PHP:如何为排队的 Laravel 作业清除大量静态变量?