考虑下面的代码,它应该打印出随机数:
import System.Random.Mersenne
main =
do g <- (newMTGen Nothing)
xs <- (randoms g) :: IO [Double]
mapM_ print xs 运行时,我会得到一个分割错误。这并不令人惊讶,因为“随机”函数产生了一个无限的列表。假设我只想打印出xs的前十个值。我怎么能这么做?xs有variable类型,我想我想要一个variable类型的变量。有什么运算符可以在两者之间进行转换。
发布于 2012-04-05 02:43:35
假设我只想打印出xs的前十个值。我怎么能这么做?
只需使用take
main =
do g <- (newMTGen Nothing)
xs <- (randoms g) :: IO [Double]
mapM_ print $ take 10 xs 你写的
xs具有IO双重类型。
但是实际上,randoms g有IO [Double]类型,但是由于do表示法,xs有类型[Double],您只需将take 10应用到它。
您还可以使用liftM跳过绑定。
main =
do g <- newMTGen Nothing
ys <- liftM (take 10) $ randoms g :: IO [Double]
mapM_ print yshttps://stackoverflow.com/questions/10017915
复制相似问题