如何在Haskell中使用random-fu生成随机数,使用平台无关的代码?

4

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

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


该模块的作用仅仅是为 IO 定义一个 MonadRandom 实例,使用 DevRandom 或者 MWC。因此,您可以像使用其他实例一样使用它。 - Daniel Fischer
你能提供一个使用 MonadRandom 的工作代码片段吗?我尝试在我的代码中将 DevRandom 替换为 MonadRandom,但这并不起作用。 - mcandre
1个回答

4

好的,我已经将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.IO的源代码中看到,它只是为MonadRandom IO定义了合适的实例。
你可以从列表中生成一个均匀分布的随机数,如下:
import Data.Random
import Data.Random.Source.IO

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

我差不多懂了。你能修改你的例子,让它生成一个在 [0 .. 9] 范围内的均匀随机数吗? - mcandre
@mcandre 看看我添加的例子。 - Satvik
有没有简单的方法来扩展它,以获取 n 个对数正态分布随机变量的列表?或者是一种随机变量的惰性列表? - Lindon

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