【问题标题】:Haskell random number generationHaskell 随机数生成
【发布时间】:2011-08-19 05:16:54
【问题描述】:

在 Haskell 中处理随机数生成的最佳方法是什么(或权衡取舍)?

我还没有真正看到权威的答案。

考虑:尽量减少对纯函数的影响、如何/何时播种、性能、线程安全

【问题讨论】:

标签: haskell random monads


【解决方案1】:

恕我直言,最好的办法是将生成器保存在 strict state 记录中。然后你可以使用普通的do-Syntax 来使用生成器。播种只进行一次 - 在主程序的开头(或在每个线程的开头)。您可以通过使用split 操作来避免 IO,该操作从一个生成两个随机生成器。 (当然不同)。

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

【讨论】:

  • @zoo 仅供参考,在状态 monad 中已经有一个不错的 RNG 包装(在 MonadRandom 和 CryptoMonadRandom 包中)。这些只是提供状态生成以及有用的访问器函数来生成常见类型。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多