无法生成随机数

时间:2015-09-22 02:02:27

标签: haskell random

我无法弄清楚如何生成随机数。

以下是我根据this尝试做的事情:

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

也尝试过:

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

然后:

  输入`&lt; - '时解析错误   也许这句话应该在'do'区块内?

1 个答案:

答案 0 :(得分:6)

我强烈推荐许多优秀的免费Haskell教程之一,例如Learn You A HaskellReal World Haskell

您可以找到有关do表示法here的更多信息。

要专门回答您的问题,您将let关键字误用do符号。基本规则是:如果答案是monad,则应使用<-而不使用let。如果值不在monad中,请写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)