2010-11-25 6 views
1

Ich habe eine Prolog-Implementierung, die es mir ermöglicht, Zeitpunkte in Ereignissen mit einer Prolog-basierten Darstellung der 13 Allen-Beziehungen zu vergleichen. Jedes Ereignis hat einen Startpunkt (JJJJ-MM-TT) und einen Endpunkt (JJJJ-MM-TT) und ich kann prüfen, ob zwei Ereignisse gleichzeitig oder eine vor der anderen passiert sind, usw. bis zur Tagesgranularität (z 1555-12-03 ist vor 1555-12-04). Es funktioniert gut mit so genannten AC-Daten (Anno Domini), aber jetzt habe ich eine gute Anzahl von Ereignissen, die BC (vor Christus) passiert ist. Was ist der beste Weg, um mit diesen BC-Ereignissen umzugehen und zum Beispiel sagen zu können, dass die Gründung von Athen (1556 v. Chr.) Vor der Geburt von Colombus (1451) steht ..... Jede Idee ist mehr als willkommen.Vergleichen von AC- und BC-Daten

Danke,

I.

Antwort

0

Wie werden Sie Ihr Datum zu speichern? Wenn es in Ihrer eigenen Struktur ist, dann fügen Sie die AD oder BC, und verwenden Sie dies als eine Art negative Flagge, BC Behandlung von Jahren als negative, AD Behandlung von Jahren als positiv.

+0

Meine Daten werden als YYYY-MM-DD dargestellt und sie werden über eine eindeutige ID an das Ereignis angehängt. Nicht immer kann ich MM-DD anhängen, wenn sie fehlen, werden sie einfach durch 00-00 ersetzt, die als unbekannt stehen. Dann habe ich Regeln, bei denen arithmetische Operatoren prüfen, ob Y1 paranza

+0

Entschuldigung, meine Nachricht wurde abgeschnitten, werden BC und AD als Label den Vergleichsmechanismus über Zeitpunkte beeinflussen? Danke für deine schnelle Antwort. I. – paranza

+0

Ich denke, Sie brauchen AD oder BC, sonst wissen Sie, ob das Jahr 250 BC oder AD ist. Für z.B. zwei Daten 2000-10-01 und 2000-12-01, würden Sie annehmen, 2000-12-01 war nach 2000-10-01, aber wenn 2000-10-01 war ein AD Datum und 2000-12-01 war ein BC-Datum war der Vergleich falsch. – JLWarlow

1

Ich glaube, er fragt, ob Ihre Reisedaten in verschiedenen Prädikaten gespeichert sind oder wenn sie nur in einem einzigen Zeitpunkt Prädikat angegeben sind, zum Beispiel a_date (12345, „2011.12.24“), wobei das erste Feld eine ID ist Feld. Das heißt, Sie Sie speichern Daten als so etwas wie

a_date (event_id, date_value)

wo date_value das Format YYYY-MM-DD?

Eine Lösung: Erfordern "AD" oder "BC" in der Datumszeichenfolge, mit dem Standardwert "BC", und Behandlung der Abwesenheit von beiden als "AD".

Eine andere Lösung: ein neues Datum Prädikat erstellen, nennen es

a_date (even_id, date_value, Merker)

wo Flagge entweder bc oder aufgeben. Wenn Flag ad ist, läuft Mathe wie gewohnt weiter. Wenn das Flag "bc" lautet, verzweigen Sie zu einem neuen Code, der die entsprechende Mathematik ausführt. Bestehende Datum Prädikate der Form a_date (event_id, date_value) würde als a_date (event_id, date_value, "AD") interpretiert werden

Das heißt, in Code

a_date (event_id, date_value): = a_date (event_id, date_value, "AD")

Verwandte Themen