我有一些奇怪的evalRandIO性能问题。这里是有问题的代码:奇怪的表现与evalRandIO
import Control.Monad.Random
inf :: (RandomGen g, Random a) => Rand g [a]
inf = sequence $ repeat $ getRandom
many :: (RandomGen g, Random a) => Int -> Rand g [a]
many n = sequence $ replicate n $ getRandom
main = do
m <- evalRandIO $ many 1000000 :: IO [Bool]
i <- evalRandIO $ inf :: IO [Bool]
putStrLn $ show $ take 5 m
putStrLn $ show $ take 5 i
这段代码将打印5个随机布尔变量,然后溢出堆栈。但是,如果我注释掉evalRandIO声明,如下所示:
main = do
--m <- evalRandIO $ many 1000000 :: IO [Bool]
i <- evalRandIO $ inf :: IO [Bool]
--putStrLn $ show $ take 5 m
putStrLn $ show $ take 5 i
代码运行良好。发生什么事?
我ghci的输出:
strontium:movie andrew$ ghci rtest.hs
GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Ok, modules loaded: Main.
Prelude Main> main
Loading package syb-0.1.0.2 ... linking ... done.
Loading package base-3.0.3.2 ... linking ... done.
Loading package mtl-1.1.0.2 ... linking ... done.
Loading package old-locale-1.0.0.2 ... linking ... done.
Loading package time-1.1.4 ... linking ... done.
Loading package random-1.0.0.3 ... linking ... done.
Loading package MonadRandom-0.1.6 ... linking ... done.
[True,True,True,True,True]
[^CInterrupted.
好的,你打断了跑步。只是为了踢,你可以让它运行,直到它本身(如果它曾经)? – ShiDoiSi 2011-04-19 11:22:25
该计划正在无限期地进食记忆。 – nitromaster101 2011-04-19 14:14:53