Haskell随机数生成

5
什么是处理Haskell随机数生成的最佳方法(或者说有什么权衡)?
我没有看到过权威的答案。
考虑:如何最小化对其他纯函数的影响,何时/如何进行种子设置,性能和线程安全。

这个编程问题的最佳答案位于:https://dev59.com/RHI95IYBdhLWcg3w3yJU,其中详细讲述了如何在代码中传递一个有状态的随机数生成器。 - stusmith
1个回答

3

在我看来,最好的想法是将生成器保持在严格状态记录中。然后您可以使用普通的do语法来处理生成器。种子仅在主程序(或每个线程的开头)开始时执行一次。您可以通过使用split操作避免IO,该操作从一个生成两个随机生成器。(当然不同)。

由于状态仍然是纯净的,因此可以保证线程安全性。此外,您始终可以通过向函数提供随机生成器来逃避状态。例如,在自动单元测试的情况下非常有用。


1
@zoo FYI,Hackage上已经有一个不错的RNG打包在状态单子中了(在MonadRandom和CryptoMonadRandom包中)。它们只是提供了在状态下生成的功能以及生成常见类型的有用访问器函数。 - Thomas M. DuBuisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接