我正在尝试使用 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/