2010-11-25 7 views
1

У меня есть реализация пролога, которая позволяет мне сравнивать моменты времени в событиях, используя прологенное представление отношений 13 Аллена. Каждое событие имеет начальную точку (YYYY-MM-DD) и конечную точку (YYYY-MM-DD), и я могу проверить, произошло ли одновременно два события или одно до другого и т. Д. До детализации (например, 1555-12-03 - до 1555-12-04). Он работает нормально с так называемыми датами AC (Anno Domini), но теперь у меня есть большое количество событий, которые произошли до н.э. (до Рождества Христова). Каков наилучший способ справиться с этими событиями в БК и уметь сказать, например, что основание Афин (до н.э. 1556) до рождения Колумбуса (1451) ..... Любая идея более чем приветствуется.Сравнивая даты AC и BC

Спасибо,

I.

ответ

0

Как вы храните дату? Если это в вашей собственной структуре, то включайте AD или BC, и используйте это как своего рода отрицательный флаг, BC рассматривает годы как отрицательные, AD обрабатывает годы как положительные.

+0

Мои даты представлены как ГГГГ-ММ-ДД, и они прикрепляются к событию через уникальный идентификатор. Не всегда я могу подключить MM-DD, поэтому, если они отсутствуют, они просто заменяются с использованием 00-00, которые стоят как неизвестные. Тогда у меня есть правила, в которых арифметические операторы проверяют, являются ли Y1 paranza 2010-11-25 17:21:09

1

Я считаю, что он спрашивает, хранятся ли ваши даты в разных предикатах или если они указаны только в одном предикате даты, например, a_date (12345, «12-24-2011»), где первое поле является идентификатором поле. То есть, вы хранить даты как что-то вроде

a_date (event_id, date_value)

где формат date_value является YYYY-MM-DD?

Одно из решений: в строке даты требуется «AD» или «BC», причем по умолчанию используется значение «BC» и рассматривается как отсутствие «AD».

Другое решение: Создать новую дату предикат, назовем его

a_date (even_id, date_value, флаг)

где флаг либо Ьс или объявления. Если флаг является объявлением, математика продолжается, как обычно. Если флаг равен 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»)