哈斯克尔 - 两个日期之间经过的日子

时间:2014-08-07 14:40:49

标签: haskell

我正在开发一个名为“Haskel-dator”的小型haskell程序,hahaha ....无论如何,继承了我目前代码的进展,以及随后的运行时错误:

代码

data Date = Date Int Int Int 
type Date = (Int,Int,Int)  

sum :: Int -> Int -> Int 
sum x y | let x - y = z 
        | where z > 0

diff :: Date -> Date -> Int   -- Difference between the two dates 
diff (a,b,c) (x,y,z) = if a < x && b < y && c < z   
        then do sum
        else return 0 


错误

*错误“myprogram.hs”: - 类型构造函数“Date”的多个声明 *

基本上,我希望我的程序有以下假设:

  • 定义类型Date =(Int,Int,Int)其中元组(1,2,2010)表示2010年2月1日。
  • 第一个参数(日期)应早于第二个参数(日期)。如果没有,请返回0。
  • 假设日期格式正确。例如,无需检查无效日期,如(32,13,2010)。
  • 闰年必须被考虑在内。

我希望我的程序实现一个看起来像这样的输出:
示例输出

diff(1,1,2010)(10,1,2010)=&gt; 9
diff(2,2,2011)(2,2,2012)=&gt; 365
diff(28,2,2012)(1,3,2012)=&gt; 2

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您应该查看标准time包。

diffDays功能正是您想要的。它返回两个日期之间的天数。

diffDays :: Day -> Day -> Integer

日期定义为Day

可以使用fromGregorian函数构建日实例。

可以找到完整的示例here

请记住,正确计算两个日期之间的天数是一项非常复杂的任务。