2013-11-14 100 views
3

我试图获取生成随机数的函数,这是我到目前为止有:随机数函数

getRandom :: Int -> Int -> Int 
getRandom x y = do 
    z <- randomRIO(x, y) 

此代码给我下面的错误:

The last statement in a 'do' block must be an expression 

现在我明白了这个错误,但我不明白这个解决方案。

我想:

return z 

但它不工作。

P.S.我非常非常新的Haskell

回答

5

A do块不能结束绑定。他们desugar到像

getRandom = randomRIO (x, y) >>= \z -> 

这显然是一个错误!如果你只想使用randomRIO

的结果
getRandom x y = randomRIO (x, y) 

工作正常。此外,如果你只是想要一个随机数,

getRandom :: IO Integer 
getRandom = randomIO 

的作品。

+0

我试过了,但是我遇到了错误:无法与实际类型'IO Int'匹配预期类型'Int' – nevero

+2

@nevero由于不纯操作留在IO单元中,因此getRandom返回'IOInt'。我推荐阅读真实世界中的“IO”章节haskell – jozefg

+0

谢谢! – nevero