s n h m r u
i

Fachkonzept: Listen

Listen stellen einen wichtigen Datentyp dar, mit welchem mehrere Daten gleichzeitig verarbeitet werden können.

Eine Liste ist entweder eine leere Liste, oder eine nicht-leere Liste.
Eine nicht-leere Liste besteht aus einer leeren Liste, an welche nacheinander beliebig viele neue Elemente angefügt wurden.
Das zuletzt angefügte Element bildet das First-Element (ebenfalls geläufig: Head), die restlichen Elemente bilden den Rest (Tail) der Liste. Der Rest ist somit wiederum eine Liste.

Die Erzeugung von Listen in Racket wird, gemäß unsere Definition, durch das Anfügen von Elementen an eine leere-Liste umgesetzt. Die hierzu genutzte Funktion cons setzt genau dies um, indem ein neues First-Element angefügt wird und die restliche Liste als Rest deklariert wird:

(cons elem-n (... (cons elem-3 (cons elem-2 (cons elem-1 empty)))))

Die Erzeugung der Liste (0, 1, 2, 3) würde schematisch wie folgt ablaufen:

Erstellung einer Liste in Racket[1]
Neben der Erstellung einer Liste mittels cons, bietet Racket die Funktion list an, welche die Erstellung einer Liste für uns übernimmt:

(list elem-n ... elem-1)

Funktionen auf Listen

Signaturen:

Racket bietet bereits native einige Funktionen an, die Listen verarbeiten. Um die Übergabe- und Rückgabedaten der Funktionen zu beschreiben, nutzen wir in den Signaturen %a und list-of.

  • %a dient als Platzhalter für einen beliebigen Datentyp. In der Praxis könnten die verwendeten Daten also beispielsweise natural, real, string, boolean oder aber jeder andere Datentyp sein.
  • list-of gibt den Datentyp Liste an. Eine Liste ist immer von einem Datentyp %a.

Gängige Funktionen:

Um das First-Element einer Liste zu erhalten nutzen wir die Funktion first. Um den Rest zu erhalten, die Funktion rest. Die Signaturen sind wie folgt:

  • first: ((list-of %a) -> %a)
  • rest: ((list-of %a) -> (list-of %a))

Um Listen in Racket zu erweitern, verwendet man entweder cons, was ein neues First-Element anfügt. oder append, welches mehrere Listen miteinander verknüpft. Die Signaturen sind wie folgt:

  • cons: (a% (list-of %a) -> (list-of %a))

  • append:
    Nutzen wir die Funktion nur zur Verknüpfung zweier Listen, so können wir die Signatur
    ((list-of %a) (list-of %a) -> (list-of %a)) annehmen.
    In der Praxis kann die Funktion jedoch eine beliebige Anzahl an Listen miteinander verknüpfen, die reale Signatur lautet daher: ((list-of %a) ... -> (list-of %a))

Genau wie append kann auch list eine beliebige Anzahl an Übergabedaten erhalten, die Signatur lautet daher wie folgt:

  • list: (%a ... -> (list-of %a))

Quellen

Suche

v
100.137.3.1.1.4 Fachkonzept: Listen
Kopieren durch Anklicken

Rückmeldung geben