【发布时间】:2017-11-24 23:06:16
【问题描述】:
以下代码在到达第二个 runRand 时挂起。为什么?
import Control.Monad.Random (Rand, getRandom, runRand)
import System.Random (RandomGen, mkStdGen)
rgen :: (RandomGen g) => Rand g [Int]
rgen = do
r <- sequence (repeat getRandom)
return $ take 5 r
main = do
let g0 = mkStdGen 0
(i,g1) = runRand rgen g0
print i
print "one done"
let (j,_) = runRand rgen g1
print j
基于对这个问题的回答:Infinite random sequence loops with randomIO but not with getRandom 我本来预计 getRandom 的懒惰性质会允许该程序终止。
【问题讨论】:
-
随机数生成器无限次运行后的状态如何?我相信这本质上就是您尝试获取
g1时所要求的。
标签: haskell random lazy-evaluation