Der Aufbau von Listen in Racket
Mika möchte mit Racket seine in der Schule erreichten Noten verarbeiten, damit er nicht alle Noten einzeln abarbeiten muss, möchte er diese in einer Liste verwalten und anschließend Funktionen auf Elementen dieser Liste ausführen.
Der Aufbau von Listen
Mika hat in der Informatik bisher vier Klausuren, mit den Notenpunkten 7, 4, 10 und 13, geschrieben. Um diese gemeinsam zu verarbeiten, müssen wir die einzelnen Daten zusammenfügen. Hierzu wollen wir eine Liste mit den entsprechenden Werten erstellen.Aufgabe 1: Der Operator cons
Eine zentraler Operator um Daten zu einer Liste zusammenzufügen ist ist der Operator cons
.
Mit diesem wollen wir ersteinmal eine Liste mit den ersten beiden Notenpunkten (7 und 4) erstellen.
(a) Um dich mit der Funktionsweise des Operators vertraut zu machen, tätige die folgenden Eingaben in der REPL:
> (cons 7 4)
> empty
Finde einen Möglichkeit mit dem Operator cons
eine Liste mit den beiden Notenpunkten zu erstellen.
Dein Ausdruck ist korrekt, wenn die REPL die Ausgabe #<list 7 4>
liefert.
Aufgabe 2: Die Operatoren first
und rest
(a) Ein durch cons
zurückgegebenes Element hat bestimmte Eigenschaften.
Führe in der REPL zuerst die folgenden Ausdrücke aus:
> (first (cons 3 empty))
> (rest (cons 3 empty))
> (first (empty))
> (rest (empty))
Überlege anschließend welche Rückgaben die folgenden zwei Ausdrücke produzieren werden?
;I
> (first (cons 7 (cons 4 (cons 10 (cons 13 empty)))))
;II
> (rest (cons 7 (cons 4 (cons 10 (cons 13 empty)))))
Überprüfe deine Annahmen in der REPL.
(b) Überlege welche Rückgaben die folgenden Ausdrücke produzieren werden?
;III
> (first (rest (cons 7 (cons 4 (cons 10 (cons 13 empty))))))
;IV
> (rest (rest (cons 7 (cons 4 (cons 10 (cons 13 empty))))))
;V
> (rest (first (cons 7 (cons 4 (cons 10 (cons 13 empty))))))
;VI
> (first (rest (rest (cons 7 (cons 4 (cons 10 (cons 13 empty)))))))
Überprüfe deine Annahmen in der REPL.
(c) Fülle den folgenden Text aus:
Die Funktion
Wenn wir eine nicht-leere Liste erzeugen wollen, müssen wir hierzu ein einzelnes Element mit einer leeren Liste verknüpfen.
Die leere Liste wird in Racket mit
cons
erstellte Liste besteht immer aus zwei Teilen: einem ersten Element und einem
Rest, der selbst wiederum eine Liste ist.
Mit den Funktionen Listen effizient erstellen
Du wirst sicher festgestellt haben, dass je länger die Liste wird, desto unübersichtlicher wird auch die Erstellung mit dem Operatorcons
.
Racket bietet daher einen weiteren Operator, der uns die Verschachtelungen erspart:
> (list 1 2 3 4)
Aufgabe 3: Der Operator list
(a) Erstelle mit list
eine Liste mit den Notenpunkten 7, 4, 10 und 13.
(b) Wenn wir doch den Operator list
haben, ist es dann überhaupt
wichtig sich mit cons
zu beschäftigen?
Führe die folgenden Ausdrücke aus und begründe anschließend deine Meinung.
> (first (list 1 2 3 4))
> (rest (rest (list 2 4 8 16)))
> (rest (list 1))
Aufgabe 4: Listen erweitern mit cons
und append
Möchten wir eine Liste erweitern, so stehen uns dafür zwei Funktionen zur Verfügung.
Das uns bekannte cons
und die Funktion append
.
Finde gemeinsam mit einem Partner heraus, worin sich die Funktionalität der Funktionen voneinander unterscheiden.
Probiere hierzu:
(a) Ein Element am Beginn und am Schluss einer Liste hinzuzufügen.
(b) Zwei Listen miteinander zu verbinden.
(c) Eine Liste aus Listen zu erstellen.