在haskell函数中无法获得正确的出生数

时间:2015-04-08 11:58:29

标签: haskell

我对haskell很新,所以我需要一些帮助,因为我真的不明白它为什么不起作用。我有一个如下所示的功能,它应该评估正确的出生数。像这样调用函数birthNum

birthNum (Date 1992 9 14) Female 

返回正确的结果(925914),但是当我在函数birthNumber中使用它时,我会得到奇怪的结果,例如: 669205408例如:9259140000

data Date = Date Int Int Int -- Year, Month, Day
data Sex = Male | Female deriving Eq

birthNum (Date y m d) s = (y `mod` 100)*10000 + m*100 + d + sex s
    where sex s | (s == Male) = 0
                | otherwise = 5000

birthNumber (Date y m d) s = [birthNum (Date y m d) s *10000 + o | o <- [0..20], (birthNum (Date y m d) s + o) `mod` 11 == 0]

1 个答案:

答案 0 :(得分:3)

将您的Date类型更改为:

data Date = Date Integer Integer Integer

Integer可用于存储任意精度的数字。请注意,Int是特定于机器的。正如@chi指出的那样,你被32位架构所困扰。此外,在函数之前编写类型签名是一种很好的做法:

birthNum :: Date -> Sex -> Integer
birthNumber :: Date -> Sex -> [Integer]