我是否需要在OCaml中调用Random.self_init?

Jac*_*ale 2 ocaml functional-programming

首先,我不关心seed这个问题.

我的问题是,Random.self_init每次我想在我的功能中重新开始时我是否应该打电话?

let shuffle l = 
  Random.self_init ();
  let tagl = List.map (fun x -> (Random.bits (), x)) l in
  List.map (fun x -> snd x) (List.sort compare tagl);;
Run Code Online (Sandbox Code Playgroud)

例如,在上面的代码中,是否Random.self_init ()有必要?

Jef*_*eld 6

每次想要洗牌时都要把它称为熵.最好在程序开始时调用一次.但是如果你想为不同的程序运行获得不同的shuffle,你需要在某个时刻初始化随机生成器.对于某些应用程序,您需要使用自己选择的特定值进行初始化(例如,如果您希望以后能够重现结果).为此你可以使用Random.initRandom.full_init.