【问题标题】:How do I generate random numbers in Haskell, using random-fu, with platform-agnostic code?如何在 Haskell 中使用 random-fu 和平台无关代码生成随机数?
【发布时间】:2012-09-14 00:03:07
【问题描述】:

我不知道如何使用Data.Random.Source.IO 以多平台方式生成随机数。

我可以在 Unix 中使用 Data.Random.Source.DevRandom 生成随机数,并且在 GitHub 文档中有一个使用 Data.Random.Source.MWC 的 Windows 示例,但没有使用 Data.Random.Source.IO 的示例代码。

【问题讨论】:

  • 该模块所做的只是为IO 定义一个MonadRandom 实例,使用DevRandomMWC。因此,您可以像使用任何其他实例一样使用它。
  • 你能给出一个使用MonadRandom的工作sn-p吗?我尝试在我的代码中用MonadRandom 查找/替换DevRandom,但这不起作用。

标签: haskell random numbers multiplatform


【解决方案1】:

好的,我已将 github 示例转换为使用 Source.IO

import Data.Random
import Data.Random.Source.IO


logNormal :: Double -> Double -> RVar Double
logNormal mu sigmaSq = do
    x <- normal mu sigmaSq
    return (exp x)

main = sample (logNormal 5 1) >>= print

您可以在Data.Random.Source.IOsource 中看到它只是为MonadRandom IO 定义了合适的实例。

你可以从一个列表中生成一个统一的随机数

import Data.Random
import Data.Random.Source.IO

main = sample (randomElement [0..9]) >>= print

【讨论】:

  • 几乎明白了。您能否修改您的示例以在[0 .. 9] 之间生成一个统一的随机数?
  • @mcandre 查看我添加的示例。
  • 有什么方法可以轻松扩展它以获得 n 个对数正态随机变量的列表?或者可能是随机变量的惰性列表?
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2012-11-27
相关资源
最近更新 更多