目前我有一些需要随机列表布尔值的 haskell 代码。目前我正在遵循书中的方法(Learn you a haskell),它是
list = randoms someStdGen :: [Bool]
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说没有好处,因为之前的列表中的 Falses 和 Trues 的数量大致相同。
获取列表的最佳方法是什么,例如,只有大约 1/4 的元素为 True。
您可以通过生成Floats列表并将它们与您的p值进行比较来做到这一点。如果浮点数低于否则p返回,例如TrueFalse
bernoulli :: RandomGen g => Float -> g -> [Bool]
bernoulli p = map (<p) . randoms
Run Code Online (Sandbox Code Playgroud)
你可以这样使用它:
> gen <- newStdGen
> take 10 $ bernoulli 0.4 gen
[False,False,False,False,False,True,True,False,True,True]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |