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.
-
define
- Definiert den Namen der gemischten Daten.
-
signature
- Legt fest, dass die nachfolgenden Datentypen innerhalb von Signaturen bei Nutzung der gemischten Daten verwendbar sind.
-
mixed
- Hinter
mixedfolgt eine Auflistung aller Datentypen, die unter den gemischten Daten zusammengefasst werden sollen. (Hier beispielsweise Records der Typen:hund,katzeundkaninchen.)
- Hinter
;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
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.