Fachkonzept: Records
Der Datentyp Records
Ein Record ist ein Datentyp der aus mehreren Daten besteht/zusammengesetzt ist.
Man nennt Records daher auch zusammengesetzte Daten. Ein Rekord besteht aus mehreren
Feldern die jeweils ein Datum des Records darstellen.
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.
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.
Die Definition eine Record-Typs erfolgt in einem define-record
-Ausdruck. Dieser ist wie folgt aufgebaut:
(define-record nameDesRecordTyps make-nameDesRecordTyps (nameDesRecordTyps-feld-1 datentyp-1) ( ... ) (nameDesRecordTyps-feld-n datentyp-n) )
- 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. - 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.
Beispiel:
(define-record schueler make-schueler (schueler-name string) (schueler-alter natural) )
Konstruktor zur Erstellung eines Records:
(make-schueler "Anton" 16)
Selektion des Alters mittels Selektor:
(schueler-alter (make-schueler "Anton" 16) )