2014-11-18 3 views
1
module Meth where 
import System.Random 



gen :: StdGen 
gen = mkStdGen 42 

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

Я пытаюсь генерировать 28 случайных чисел, я получаю сообщение об ошибке ошибкуГенерация случайных чисел Haskell

не может сравниться типа «Int» с «(Int, Int)» Ожидаемый тип : [(Int, Int)] Фактический тип: [Int] В выражении: взять 28 $ randoms g :: [Int] В уравнении для 'тасований': shuffles g = take 28 $ randoms g :: [Int]

+2

Несогласованные круглых скобках Последняя линия. Голосование закрывается как опечатка. – ApproachingDarknessFish

+0

'take 28 $ randoms g :: [Int]' –

+0

Вы генерируете список 'Int' и пытаетесь вернуть список' (Int, Int) '. – Lee

ответ

2

Вы явно сказать, вы создаете список Int типов:

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

Тогда вы говорите, что вы на самом деле хотите получить список пар Int с:

... -> [ (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) 
Смежные вопросы