对OCaml的StdLib中“模块随机”的当前状态进行序列化

问题描述 投票:0回答:1

我必须阅读标准库模块RandomRandom.State上的OCaml手册页六次(可能更频繁),但是我不知道如何序列化PRNG的当前内部状态。

这是我到目前为止所学到的:

  • 模块RandomRandom.State都在从外部抽象/不透明的状态下运行。

  • 两个模块都提供两个/三个初始化器,但是函数导出当前状态...我看不到它们:(

我该怎么办?请帮助!

serialization random ocaml standard-library
1个回答
0
投票
您可以使用Marshal模块对状态进行序列化(和反序列化),例如

let save_random_state out = Marshal.to_channel out (Random.get_state ()) [] let load_random_state inp = Random.set_state (Marshal.from_channel inp)

但是,如果您只希望Random模块生成相同的伪随机数序列,则比使用相同的状态初始化(即使用相同的种子)更好,例如,如果您要使用,

let () = Random.set_state (Random.State.make [|42|])

您将获得程序的确定性,因为Random模块将始终生成相同的数字。    
© www.soinside.com 2019 - 2024. All rights reserved.