无法生成随机数

Pla*_*Pro 0 random haskell

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

以下是我要按照这样做的方法:

main :: IO ()
main = do
  let
     g <- getStdGen
     bla = randomRs (0, 360) g
Run Code Online (Sandbox Code Playgroud)

还尝试过:

main :: IO ()
main = do
  let
    r <- randomIO
Run Code Online (Sandbox Code Playgroud)

然后:

输入"< - "的解析错误也许这个语句应该在'do'块中?

cro*_*eea 6

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

您可以在此处找到有关do符号的更多信息.

要专门回答您的问题,您滥用let关键字和do符号.基本规则是:如果答案是monad,你应该使用<-no let.如果值不在monad中,请写入let bla = ....您可以连续编写多个此类语句,而无需复制let关键字:

do
  x <- y :: m a
  let z = z1
      z' = z2
      ...
  w <- w' :: m b
  z <- z' :: m c
...
Run Code Online (Sandbox Code Playgroud)

你的代码应该更像:

main :: IO ()
main = do
  g <- getStdGen
  let bla = randomRs (0,360) g
Run Code Online (Sandbox Code Playgroud)

更好的选择是使用MonadRandom完全隐藏生成器(状态):

include Control.Monad.Random

main :: IO ()
main = do
  bla <- getRandomR (0,360)
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是一个很好的开始方式,但这些并不是完整的`do`块,因为一个语句中的最后一个语句必须是单个表达式,而不是`let ...`或`... < - ...`. (3认同)