Die Funktion map
Verändern von Elementen in einer Liste
Für die Ergebnisse einer Informatikklausur hat die Lehrkraft folgende Liste angelegt:
(define klausurNoten
(list "Ahmad" 11 "Bianca" 8 "Cleo" 11 "Dev" 7 "Emil" 3 "Felia" 5 "Giray" 7))
Nach etwas Überlegung beschließt sie, 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:
> (map ceiling (list 1.3 2.1 -3.1 -5.7))
> (map natural? (list 42 17 24 4.1))
> (map string-length (list "Informatik" "Racket" "Funktion"))
(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
Bisher fehlt uns eine Funktion mit derer wir über map
die Werte in der Liste um eins erhöhen können. Das wollen wir nun ändern,
der folgende Ausdruck soll die Erhöhung aller Listenelemente vornehmen:
(map add1 (list 0 1 2 3))
(a) Schreibe die Funktion add1
und überprüfe deine Funktion mit dem
oberen Ausdruck.
Aufgabe 3: Neue Funktionen innerhalb von map
Um nicht jedesmal 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:
(map (lambda (x) (+ x 1)) (list 0 1 2 3))
(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 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.
(define klausurNoten
(list "Ahmad" 11 "Bianca" 8 "Cleo" 11 "Dev" 7 "Emil" 3 "Felia" 5 "Giray" 7))
(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.