haskell - 如何使用randomRIO生成无限的随机数列表?

标签 haskell

我正在尝试使用 randomRIO 生成一个无限的随机数列表。

import System.Random

g :: IO [Integer]
g = do
  n <- randomRIO (1,6) :: IO Integer
  f <- g
  return (n : f)

它编译但在运行时挂起。

最佳答案

您的代码的问题在于它永远不会终止。无论何时执行 g ,它最初都会计算第一个随机数并将其存储在 n 中。然后它再次递归地回调同一个函数 g ,这个函数一直在继续。要获得无限列表,您可以使用 randomRs 函数:

g2 :: IO [Integer]
g2 = do
  g <- newStdGen
  return $ randomRs (1,6) g

然后你可以使用它产生任意数量的随机数:
λ> g2 >>= \x -> return $ take 5 $ x
[5,4,6,5,6]

关于haskell - 如何使用randomRIO生成无限的随机数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31342002/

相关文章:

Haskell 安全资金示例

postgresql - 在haskell中用单反斜杠替换双反斜杠

haskell - putStr 和 putStrLn 弄乱了输出

haskell - 使用模板 haskell 定义实例时避免孤立实例

haskell - let-bindings 中的声明顺序,Haskell 与 OCaml

mysql - "Not a PersistText value"是什么意思?

haskell - 通过 ReaderT 导出

haskell - 为什么这些实例不产生重叠实例错误

haskell - GHC 8.0.1 挂起。解释或编译器错误?

haskell - 与 TypeApplications 一起使用时,AllowAmbigouslyTypes 有多危险?