2015-09-22 237 views
0

我無法弄清楚如何生成隨機數。無法生成隨機數

這裏是我正在努力根據this做:

main :: IO() 
main = do 
    let 
    g <- getStdGen 
    bla = randomRs (0, 360) g 

也試過:

main :: IO() 
main = do 
    let 
    r <- randomIO 

則:輸入`<

解析錯誤 - 」 也許這種說法應該在'做'區塊內?

回答

6

我強烈推薦了許多很棒的免費Haskell教程之一,例如Learn You A HaskellReal World Haskell

你可以找到更多關於do表示法here

要專門回答您的問題,您正在濫用let關鍵字和do表示法。基本規則是:如果答案在monad中,則應該使用<-而不是let。如果該值不在單子中,請寫let bla = ...。你可以寫在連續幾個這樣的語句,而不必複製let關鍵字:

do 
    x <- y :: m a 
    let z = z1 
     z' = z2 
     ... 
    w <- w' :: m b 
    z <- z' :: m c 
... 

您的代碼應該更像:

main :: IO() 
main = do 
    g <- getStdGen 
    let bla = randomRs (0,360) g 

一個更好的選擇是使用MonadRandom隱藏發生器(州)完全:

include Control.Monad.Random 

main :: IO() 
main = do 
    bla <- getRandomR (0,360) 
+3

儘管這是一個很好的開始方法,但它們並不是完整的'do'塊,因爲其中的最後一個語句必須是單個表達式,而不是'let ...'或'... < - ...'。 –