我一直试图比较prolog中的两个日期。
日期格式为日期(YYYY,MM,DD)
ex:(2016,04,21)。
我想比较两个日期,并知道这些日期之间的差异(天数)是否大于15天(2周)。
%dateDifference( number_of_day, date_no1, date_no2 ).
dateDifference( 35, date(2003,8,16), date(2003,9,20) ).
答案 0 :(得分:2)
根据日历和涵盖的时间段计算两个日期之间的天数差异可能很简单或棘手。假设格里高利历,通常的解决方案是将日期转换为儒略日。正如@mat在其评论中提到的,对于SWI-Prolog,请考虑{{1}};
https://github.com/mndrix/julian
对于可与大多数Prolog系统(包括SWI-Prolog)一起使用的便携式解决方案,Logtalk包含可用于这些计算的第三方ISO 8601库:
答案 1 :(得分:0)
首先,你应该记下@Boris的笔记, 第二, 为了简化问题,您的谓词分为三个部分:
第1部分:
代码:
calcule_days([Y,M,D],Res):-
Res is (((Y*1461)/4)+((M*153)/5)+D).
第2部分:
formula
(part1)应用于date1和date2,difference_date1_date2
,abs(difference_date1_date2)
round (result_abs_pred)
演示代码:
dateDifference(NumberOfDays,date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...
第3部分:
>= 15
,结果必须为True/false
演示代码:
bigger_2weeks(date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...