2013-11-14 130 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