1

我有一个 prolog 实现,它允许我使用基于 prolog 的 13 Allen 关系表示来比较事件中的时间点。每个事件都有一个起点(YYYY-MM-DD)和一个终点(YYYY-MM-DD),我可以检查两个事件是同时发生还是一个在另一个之前发生,等等直到一天的粒度(例如1555-12-03 在 1555-12-04 之前)。它确实适用于所谓的 AC 日期(Anno Domini),但现在我有很多发生在公元前(基督之前)的事件。处理这些 BC 事件的最佳方式是什么,并且能够说,例如,雅典的基础(公元前 1556 年)是在哥伦布(1451 年)诞生之前......任何想法都非常受欢迎。

谢谢,

一世。

4

2 回答 2

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 是 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")

于 2010-11-25T20:55:50.543 回答
0

你是如何存储你的日期的?如果它在您自己的结构中,则包含 AD 或 BC,并将其用作一种否定标志,BC 将年份视为负数,AD 将年份视为正数。

于 2010-11-25T17:04:30.963 回答