Pen & Paper - Rollenspiel > Werkstatt

Covella - Fantasy-Kalender - DSL für beliebige Systeme von Zeitmessung

<< < (14/17) > >>

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