生成随机数Haskell

时间:2014-11-18 17:16:11

标签: haskell

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'的等式中:          shuffles g = take 28 $ randoms g :: [Int]

1 个答案:

答案 0 :(得分:2)

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

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

然后你还说你实际上想要一对Int s:

的列表
... -> [ (Int, Int) ]
你想要哪个?如果你想要成对,那么拆分你的生成器并将两个单独的调用压缩到randoms

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

如果您只想要Int的列表,请修复错误的类型签名:

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