在Elm 0.17中,我想运行一个依赖于随机数的程序,但我希望有一个用户指定的种子.这是为了在多个用户会话中获得可重现的结果:输入相同种子的用户应该看到相同的结果.
但我无法弄清楚如何影响内置函数的行为,如:
Random.list 10 (Random.int 0 100)
Run Code Online (Sandbox Code Playgroud)
通过上面的呼叫,我想在每次输入相同的种子时得到10个随机数的相同列表.但我根本无法弄清楚如何喂种子.我很感激任何帮助!
使用Random.step可以使用用户指定的种子使用Random生成随机值
您需要指定Generator和Seed,其中Generator a是一个a使用整数生成类型随机值的函数Seed
要创建一个Seed从整数,你需要使用Random.initialSeed函数,因为Seed它不是一个普通的整数,它是一个包含元信息的数据结构,用于下一步的Generator
Generator a -> Seed -> (a, Seed)
调用Random.step将返回一个新状态(a, Seed),其中a是您的随机值,并且Seed是生成下一个随机值所需的种子.
我做了一个全面的例子,它展示了如何使用生成器来生成随机值:使用用户指定的种子的随机值
这个例子对于答案来说可能太大了,所以我将重点介绍最重要的部分:
generator : Int -> Generator (List Int)
generator length =
Random.list length (Random.int 0 100)
Run Code Online (Sandbox Code Playgroud)
该seed会通过用户输入指定的,或者你可以把它作为在启动时的标志.
Random.step (generator 10) seed
Run Code Online (Sandbox Code Playgroud)