我有一个prolog实现,允许我使用基于prolog的13 Allen关系表示来比较事件中的时间点。每个事件都有一个起点(YYYY-MM-DD)和一个终点(YYYY-MM-DD),我可以检查两个事件是同时发生还是一个发生在另一个之前,等等直到当天的粒度(例如1555-12-03在1555-12-04之前)。它确实与所谓的AC日期(Anno Domini)一起工作,但现在我有很多事件发生在BC(在基督之前)。什么是处理这些不列颠哥伦比亚省事件的最佳方式,并且能够说,例如雅典(BC 1556)的基础是在哥伦布诞生之前(1451年).....任何想法都非常受欢迎。< / p>
谢谢,
予。
答案 0 :(得分:1)
我相信他会询问您的日期是否存储在各种谓词中,或者它们是否仅在单个日期谓词中指定,例如a_date(12345,“12-24-2011”),其中第一个字段是ID字段。也就是说,您是否将日期存储为
a_date(event_id,date_value)
其中date_value的格式是YYYY-MM-DD?
一种解决方案:在日期字符串中要求“AD”或“BC”,默认为“BC”,并将其中任何一个视为“AD”。
另一个解决方案: 创建一个新的日期谓词,称之为
a_date(even_id,date_value,flag)
其中flag是bc或ad。如果flag是ad,那么数学就像往常一样继续。如果flag是bc,则转移到执行适当数学运算的新代码。表单的现有日期谓词 a_date(event_id,date_value)将被解释为 a_date(event_id,date_value,“AD”)
即代码
a_date(event_id,date_value):= a_date(event_id,date_value,“AD”)
答案 1 :(得分:0)
您如何存储日期?如果它在你自己的结构中,那么包括AD或BC,并将其用作一种负面标志,BC将多年视为负面,AD将多年视为正面。