1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 module MyRandom (randomInts) where 18 19 20 21 22 randomInts :: Int -> Int -> [Int] 23 randomInts s1 s2 = if 1 <= s1 && s1 <= 2147483562 then 24 if 1 <= s2 && s2 <= 2147483398 then rands s1 s2 25 else error "randomInts: Bad second seed." 26 else error "randomInts: Bad first seed." 27 28 rands :: Int -> Int -> [Int] 29 rands s1 s2 = 30 let 31 k = s1 `div` 53668 32 s1' = 40014 * (s1 - k * 53668) - k * 12211 33 s1'' = if s1' < 0 then s1' + 2147483563 else s1' 34 k' = s2 `div` 52774 35 s2' = 40692 * (s2 - k' * 52774) - k' * 3791 36 s2'' = if s2' < 0 then s2' + 2147483399 else s2' 37 z = s1'' - s2'' 38 in if z < 1 then z + 2147483562 : rands s1'' s2'' 39 else z : rands s1'' s2'' 40