Records
Der Datentyp Record
Manchmal ist es notwendig, verschiedene zusammengehörige Informationen gemeinsam abzuspeichern.
Zum Beispiel, wenn wir den Name und das Alter von Schüler:innen abspeichern möchten.
Hierfür nutzen wir den Datentyp Record.
Welche Informationen ein Record enthalten soll, legen wir in einer Record-Definition fest.
Dies erfolgt in einem define-record
-Ausdruck der aus mehreren Bestandteilen besteht:
- Der Name des neuen Record-Typs
Dieser Name bezeichnet den Record-Datentyp und wird unter anderem in Signaturen verwendet um zu beschrieben welche Struktur dem Datentyp zugrunde liegt. - Den Konstruktor
Diese Funktion erzeugt einen neuen Record. Sie erhält als Parameter für jedes Feld Daten vom entsprechenden Datentyp und gibt einen Record zurück. -
Die Felder des Record-Typs
Diese bestimmen, aus welchen Informationen ein Record des definierten Record-Typs zusammengesetzt sein soll. Für ein Feld werden zwei Informationen angegeben:- Ein Selektor. Diese Funktion gibt auf einen Record angewandt, den Inhalt des entsprechenden Feldes zurück.
- Der Datentyp des Feldes.
(define-record schueler make-schueler (schueler-name string) (schueler-alter natural) )
Zum Erstellen eines eigenen Record-Typs definieren wir eine Konstruktor-Funktion mit dem ein Record des neuen Record-Typs produziert werden kann, sowie die enthaltenen Felder. Für jedes Feld wird neben dem Datentyp eine Selektor-Funktion angegeben, mit welcher wir die Daten des Feldes für einen Record erhalten.
Anhand des obigen Beispiels können wir einen beispielhaften Record wie folgt erstellen:
(make-schueler "Anton" 16)Durch einen Selektor lassen sich anschließend einzelne Felder wieder aus dem Record extrahieren:
(schueler-alter (make-schueler "Anton" 16) )
Aufgabe 1: Kinoverwaltung
Ein lokales Kino möchte ein Verwaltungssystem entwickeln, das die geplanten Filmvorstellungen verwaltet.
Dabei sollen Informationen zu den einzelnen Filmen gemeinsam gespeichert werden um sie bei Bedarf verarbeiten zu können.
Bisher wurden die Filme einfach in einer Excel-Tabelle gesichert:
(a) Entwerfe einen geeigneten Record-Typ für die Darstellung der Filme.
(b) Das Kino möchte eine Funktion bereitstellen, die prüft, ob ein bestimmter Film an einem bestimmten Datum läuft/lief. Schreibe eine solche Funktion. Achte für die Kalenderdaten auf ein für dein Zweck geeignetes Format.
(c) Für Schüler:innen möchte das Kino ein besonderes Angebot einführen. Wenn diese einen Film buchen,
erhalten sie 40 % Rabatt auf den eigentlichen Preis. Schreibe hierfür eine Funktion die
für einen Film prüft ob der:die Schüler:in die FSK-Anforderungen erfüllt und wenn ja, diesen den
reduzierten Preis anzeigt. Nutze für Schüler:innen den bestehenden Record-Typ schueler
.