i

Strukturierung: Gemischte Daten

Implementierung von gemischten Daten

Manchmal verwendet man verschiedene Datentypen, die jedoch in einem oder mehreren Feldern dieselbe Art von Information enthalten. Beispielsweise das Gewicht verschiedener Tierarten.
Durch die Verwendung von gemischten Daten lassen sich diese unterschiedlichen Datentypen unter einem gemeinsamen Obertyp zusammenfassen. Dadurch kann z. B. eine Funktion, die für alle Varianten dieselbe Information verarbeitet (etwa die Bestimmung des Gewichts) einheitlich als eine einzige Funktion formuliert werden.

Gemischte Daten sind eine Zusammenfassung verschiedener Datentypen, welche jedoch gemeinsame Operationen unterstützen.
Um in Racket gemischte Daten zu implementieren, benötigen wir drei Schlüsselwörter:
  1. define
    • Definiert den Namen der gemischten Daten.
  2. signature
    • Legt fest, dass die nachfolgenden Datentypen innerhalb von Signaturen bei Nutzung der gemischten Daten verwendbar sind.
  3. mixed
    • Hinter mixed folgt eine Auflistung aller Datentypen, die unter den gemischten Daten zusammengefasst werden sollen. (Hier beispielsweise Records der Typen: hund, katze und kaninchen.)
Im Racket-Code sieht eine Definition gemischter Daten beispielhaft wie folgt aus:
;Ein Tier ist eines der folgenden:
; - Hund
; - Katze
; - Kaninchen
(define tier
  (signature
   (mixed hund katze kaninchen)))

Nutzung von gemischten Daten

Bei der Arbeit mit gemischten Daten ist es häufig dennoch wichtig zu erkennen, von welchem konkreten Datentyp ein gegebenes Datum ist, um mittels Fallunterscheidungen die passenden, record-spezifischen Funktionen wählen zu können.

Um zu prüfen, ob ein Datum einem bestimmten Record-Typ entspricht, werden die Record-Definitionen um ein Prädikat ergänzt. Hierbei handelt es sich um eine automatisch erzeugte Funktion, die testet, ob ein übergebenes Datum dem zugeordneten Record-Typ entspricht, und einen entsprechenden Wahrheitswert zurückgibt.

So beispielsweise das Prädikat eisbaer? für die Record-Definition eisbaer.

(define-record eisbaer
  make-eisbaer
  eisbaer?
  (eisbaer-name string)
  (eisbaer-gewicht real))

Aufgabe 1: Schlangenpatienten

Bestehende Datei - gemischte_daten.rkt

Durch die Einstellung einer neuen Tierärztin kann die Tierarztpraxis nun auch Schlangen behandeln.

(a) Schreibe eine geeignete Record-Definition für die Tierart Schlange.

Tierart Felder
Schlange Name Geschlecht Alter Gewicht Länge Art

(b) Erweitere die gemischten Daten tier um die Tierart Schlange

(c) Erweitere die Funktion tier-gewicht so, dass diese auch die Gewichtsbestimmung für Schlangen zulässt. Prüfe deine Erweiterung anhand eines von dir angelegten Records einer Schlange.

Suche

v
100.137.2.4.1.2 Strukturierung: Gemischte Daten
Kopieren durch Anklicken

Rückmeldung geben