我对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]
答案 0 :(得分:3)
将您的Date
类型更改为:
data Date = Date Integer Integer Integer
Integer
可用于存储任意精度的数字。请注意,Int
是特定于机器的。正如@chi指出的那样,你被32位架构所困扰。此外,在函数之前编写类型签名是一种很好的做法:
birthNum :: Date -> Sex -> Integer
birthNumber :: Date -> Sex -> [Integer]