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]
答案 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)