Die Listenfunktion map und anonyme Funktionen
Verändern von Elementen in einer Liste
Für die Ergebnisse einer Informatikklausur hat die Kurslehrkraft folgende Liste angelegt:
Nach etwas Überlegung beschließt sie allerdings, dass sie die Klausur doch etwas hart bewertet hat. Nun möchte sie jede Note in der Liste um einen Notenpunkt erhöhen.Aufgabe 1: Verändern von Listenelementen
Zum Verändern von Listenelementen finden sich im Internet unter anderem die folgenden Beispiele:
(a) Mach dich mit der Funktion map
vertraut, indem du die Beispiele in der REPL ausführst und ggf. eigene Ausdrücke entwirfst.
(b) Beschreibe, welchen Zweck die Funktion map
erfüllt.
(c) Welche Eigenschaften müssen die beiden Operanden erfüllen, um einen korrekten map
-Ausdruck zu erzeugen?
(d) Können wir mittels der Funktion map
einen Ausdruck schreiben, der jeden Wert in der Liste (list 0 1 2)
erhöht? Begründe deine Meinung.
Aufgabe 2: Listenelemente um eins erhöhen
Nun benötigen wir nur noch eine Funktion mit derer wir über map
die Werte in der Liste um eins erhöhen können. Der folgende Ausdruck soll die Erhöhung aller Listenelemente vornehmen:
(a) Schreibe die Funktion add1
und überprüfe deine Funktion mit dem oberen Ausdruck.
Aufgabe 3: Neue Funktionen innerhalb von map
Um nicht jedes Mal wenn wir eine Liste verändern wollen, eine neue Funktion definieren zu müssen, bietet uns Racket eine weitere Möglichkeit, geeignete map
-Ausdrücke zu entwerfen. So lassen sich Zahlen in eine Liste beispielsweise wie folgt erhöhen:
(a) Führe den Ausdruck in der REPL aus und vergleiche das Ergebnis mit deinem Ergebnis aus Aufgabe 2.
(b) Vergleiche den ersten Operanden des map
-Ausdrucks mit deiner definierten Funktion aus Aufgabe 2. Wo findest du Gemeinsamkeiten und wo Unterschiede?
(c) Verändere den obigen Ausdruck so, dass dieser die Zahlen erst um zwei erhöht und anschließend verdreifacht.
Aufgabe 4: Noten um einen Notenpunkt erhöhen.
Nun kennen wir alle Mittel, die nötig sind, um auch die Noten in der Notenliste zu erhöhen.
(a) Übertrage die Definition klausurNoten
in deine Racket-Datei.
(b) Erhöhe alle Noten um einen Notenpunkt, indem du die Liste über einen map
-Ausdruck verarbeitest. Ob du dafür eine neue Funktion definierst oder die Logik in den map
-Ausdruck integrierst, bleibt dir überlassen.