Diesmal soll es um einen aus meiner Sicht recht wichtigen Teil für Dr. Racket. Um das Anlegen und verwenden von Listen. In Listen könnt ihr dynamische Datenstrukturen speichern die in irgendeiner Form miteinander in Beziehung stehen.
Ich möchte euch zuerst zeigen wie ihr Listen in Dr. Racket anlegen könnten und danach wie ihr die Information aus listen weiterverwenden könnt.
Anlegen von Listen
Um Listen in Dr. Racket anlegen zu können, müsst ihr natürlich zuerst die Entwicklungsumgebung starten =) Wir unterscheiden drei Möglichkeiten, Listen in Dr. Racket anzulegen.
1 2 3 4 5 6 7 8 | ;; Möglichkeit 1 (cons 0 (cons 1( cons 2( cons 3 emtpy)))) ;; Möglichkeit 2 (list 1 2 3) ;; Möglichkeit 3 ‘(1 2 3) |
Bei jeder der drei Möglichkeiten ensteht die selbe Liste, nämlich eine Liste mit den Zahlen eins, zwei und drei als Inhalt. Bei Möglichkeit 1 wird jedes Element nacheinander in die Liste geschrieben. Diese Variante wird oft für rekursive Methoden verwendet, bei denen eine List als Ergebnis zurückgegeben werden soll.
Möglichkeit zwei und drei erzeugen direkt eine Liste mit den gewünschten Inhalten. Möglichkeit 3 ist im wesentlichen nur die Kurzschreibweise von Möglichkeit 2. Ich persönliche würde aber eher die zweite Variante verwenden, da es bei der dritten Variante öfters mal zu Fehlern kommen kann. Um nun mit der Liste arbeiten zu können müssen wir eine liste anlegen und dieser einen Namen vergeben. Ich verwende dafür mal Variante zwei.
1 | (define lon (list 1 2 3)) |
Listen auslesen
Ok wir haben nun mit einer der drei möglichen Varianten eine Liste mit den Zahlen von eins bis drei angelegt. Nun wollen wir auf die einzelnen Elemente zugreifen. Um auf das erste Element der Liste zuzugreifen verwenden wir den folgenden Code:
1 | (first lon) |
Wollen wir nun den Rest der Liste haben, also eine Liste die aus den Zahlen zwei und drei besteht verwenden wir den folgenden Befehl.
1 | (rest lon) |
Woran liegt das nun? Ein Listeneintrag kann immer nur aus zwei werten bestehen, einem First und einem Rest. Habe ich nun eine Liste aus drei Zahlen habe ich als ersten Listeneintrag die Zahl eins und als zweiten Listeneintrag eine weiter Liste, welche die Zahlen zwei und drei beinhaltet.
Will ich mir nun die Zahl zwei ausgeben lassen, also die mittlere Zahl, dann verwende ich den folgenden Code:
1 | (first (rest lon)) |
Was passiert dabei genau. Als erstes wird die innere Klammer ausgeführt. Wir haben also den Rest der Liste ( die Liste mit dem Inhalt (2 3)). Von diesem Rest der Liste lassen wir uns nun den ersten Wert zurückgeben.
Es funktioniert genau so wenn wir die dritte Zahlen haben wollen. Es wird wieder einmal mehr verschachtelt.
1 | (first (rest (rest lon))) |
Hier wird wieder zuerst der Rest der kompletten Liste genommen (2 3). Davon wird wieder der Rest genommen. Nun entsteht eine Liste die so aussieht (3 empty). Von dieser Liste brauchen wir nun den ersten Eintrag, also verwenden wir First.
Ich hoffe ich habe es nicht zu kompliziert Erklärt =) Aber falls es Probleme gibt könnt ihr diese Ja einfach in die Kommentare schreiben.