Pen & Paper - Rollenspiel > Werkstatt
Covella - Fantasy-Kalender - DSL für beliebige Systeme von Zeitmessung
achlys:
Ein "=" "Monat=5", wobei ich der Klarheit wegen in der Ausgabe "Monatsnummer = 5" nehmen würde, oder man dreht es um: "5. Monat"
Gesendet mit nem Smartphone. Tippfehler dürfen behalten werden.
1of3:
OK. Gleichheitszeichen geht auch nicht. Da hab ich nicht dran gedacht.
Gesendet von meinem K011 mit Tapatalk
sir_paul:
Wie wäre es mit "ist" als Operator oder halt auf englisch "is". Dann könnte man einfach schreiben Tag ist 3, Monat ist 5, etc.
Gesendet von meinem Nexus 9 mit Tapatalk
achlys:
Ein Pfeil? '->'
1of3:
Pfeil wäre möglich. Produziert grundsätzlich Tupel, also A->B ist das selbe wie (A,B), aber da könnte man mit implicits zaubern.
Nächste Frage. Aktuell sieht unser westlicher Kalender (wenn wir Schaltsekunden ignorieren) so aus:
--- Zitat ---
// Zeiteinheiten
var millis = Tick("millisecond") countFromZero
var seconds = Cycle from millis(1000) named "second" countFromZero
var minutes = Cycle from seconds(60) named "minute" countFromZero
var hours = Cycle from minutes(60) named "hour" countFromZero
var days= Cycle from hours(24) named "day"
var months= IrregularUnit("month")
var years = IrregularUnit("year")
// Ausprägungen unregelmäßiger Zeiteinheiten
val january = days(31) as month named "January" aka ("short","Jan")
val february = days(28) as month named "February" aka ("short","Feb")
val march = days(31) as month named "March" aka ("short","Mar")
val april = days(30) as month named "April" aka ("short","Apr")
val may = days(31) as month named "May" aka ("short","May")
val june = days(30) as month named "June" aka ("short","Jun")
val july = days(31) as month named "July" aka ("short","Jul")
val august = days(31) as month named "August" aka ("short","Aug")
val september = days(30) as month named "September" aka ("short","Sep")
val october = days(31) as month named "October" aka ("short","Oct")
val november = days(30) as month named "November" aka ("short","Nov")
val december = days(31) as month named "December" aka ("short","Dec")
val standardYear = january + february + march + april + may + june + july +
august + september + october + november + december as year
val leapFebruary = day(29) as month named "February"aka ("short","Feb")
val leapYear = january + leapFebruary + march + april + may + june + july +
august + september + october + november + december as year
val october1582 = october exclude (5 to 14)
val year1582 = january + february + march + april + may + june + july +
august + september + october1582 + november + december as year
// Wir bauen uns die Schaltregel und den Wechsel von Julianisch auf Gregorianisch
val westernEra =
Era given 1582 have year1582 // wenn eine Jahreszahl abgefragt wird, wir das 1. Passende geliefert
given (x => x > 1582 && x%100==0 && x%400!=0) have standardYear
given (_ % 4 == 0) have leapYear
rest standardYear
exclude 0 // Jahr 0 gibts nicht.
setEraNames ( x => Map( "default" -> (if (x>=0) x + " CE" else x + " BCE") ) ) // setzt die Jahresnamen
// Wir machen einen Kalender draus
val westernCalendar = Calendar(westernEra)
--- Ende Zitat ---
Zur Verschönerung könnte man noch Funktionen wie divisbleBy und notDivisibleBy definieren. Teilbarkeit ist für Schaltregeln ein ziemlich übliches Kriterium.
Was jetzt noch fehlt, sind sekundäre Zyklen. Also bei uns z.B. die Wochen.
Um solche sekundären Zyklen anzuhängen, braucht es drei Informationen:
a) Welchen Zyklus
b) Wo soll ich ihn anhängen, also irgendeinen Zeitpunkt in der primären Ära.
c) Welchen Zeitpunkt des sekundären Zyklus möchte ich genau synchronisieren.
Bis auf (a) sollen die beiden anderen Angaben optional sein. Das ist soweit kein Problem. Fehlt (b) gehen wir von Datum 0 aus. Fehlt (c), nehmen wir an, der Anfang des sekundären Zyklus ist gemeint.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln