【问题标题】:Generate random number Haskell生成随机数 Haskell
【发布时间】:2015-01-15 23:36:19
【问题描述】:
module Meth where
import System.Random



gen :: StdGen
gen = mkStdGen 42

shuffles:: StdGen->[(Int,Int)]
shuffles g = take 28(randoms g :: [Int])

我正在尝试生成 28 个随机数,但一直收到错误消息 错误

无法将“Int”类型与“(Int, Int)”匹配 预期类型:[(Int, Int)] 实际类型:[Int] 在表达式中:取 28 $ randoms g :: [Int] 在“洗牌”的等式中: shuffles g = take 28 $ randoms g :: [Int]

【问题讨论】:

  • 最后一行的括号不匹配。投票结束是一个错字。
  • take 28 $ randoms g :: [Int]
  • 您正在生成Int 的列表并尝试返回(Int, Int) 的列表。
  • 我放了括号,但它仍然给我一个错误

标签: haskell


【解决方案1】:

您明确表示您正在生成Int 类型的列表:

... (randoms g :: [Int])

然后你还说你实际上想要一个Ints 对的列表:

... -> [ (Int, Int) ]

你想要什么?如果你想要对,那么拆分你的生成器并将两个单独的调用压缩到randoms

shuffles:: StdGen->[(Int,Int)]
shuffles g =
    let (g1,g2) = split g
    in take 28 $ zip (randoms g1) (randoms g2) 

如果您只想要Ints 的列表,请修复不正确的类型签名:

shuffles:: StdGen -> [Int]
shuffles g = take 28 (randoms g)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多