i

Die Listenfunktion map und anonyme Funktionen

Verändern von Elementen in einer Liste

Zur Analyse der Tagesverlaufstemperatur wurde in San-Francisco am Dienstag, den 15.08.2024, stündlich die Temperatur erhoben. Es ergaben sich die folgenden 24 Temperaturwerte in Fahrenheit:

(define temp-sf-fahrenheit
    (list 60 59 58 58 59 59 60 62 63 65 66 66 67 70 69 71 70 68 66 63 63 63 62 62))

Damit diese Daten international verständlich sind und sich leichter mit anderen Klimadaten vergleichen lassen, sollen sie nun in das metrische System (Celsius) umgerechnet werden.


Aufgabe 1: Fahrenheit zu Celsius

(a) Schreibe eine Funktion f-zu-c, die einen Temperaturwert von Fahrenheit zu Celsius umrechnet.
Umrechnung: $^{\circ}C = \frac{^{\circ}F\ -\ 32}{1,8}$

(b) Erstelle mithilfe deiner Funktion f-zu-c eine Liste, die die ersten vier Temperaturwerte von temp-sanfrancisco-fahrenheit in Celsius enthält.


Aufgabe 2: Funktionen auf alle Listenelemente anwenden

Wie du in Aufgabe 1 gemerkt hast, ist die manuelle Anpassung jedes einzelnen Elements und das anschließende erneute Zusammenfügen zu einer Liste umständlich und zeitraubend. Als alternative Vorgehensweise 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) Nutze die Funktion map, um eine Liste zu erzeugen, die jeden Temperaturwert von temp-sanfrancisco-fahrenheit in Celsius enthält.

(d) Erstelle eine Liste, in der alle Temperaturwerte in Celsius angezeigt werden und auf ganze Zahlwerte gerundet sind.

(e) Die Funktion map bekommt zwei Operanden als Übergabedaten übergeben. Welche Eigenschaften müssen die beiden Operanden erfüllen, um einen korrekten map-Ausdruck zu erzeugen? (Tipp: Achte auf die Datentypen.)


Aufgabe 3: Neue Funktionen innerhalb von map

Bestehende Datei - listenFunktionen.rkt

Angenommen, wir möchten die Werte einer Zahlenliste (list 0 1 2 3) um den Wert 1 erhöhen. Dann bietet der folgende Code eine Umsetzung dieser Funktionalität:

;Erhöht übergebenen Wert um 1
(: add1 (real -> real))
(define add1
  (lambda (x)
    (+ x 1)))

(map add1 (list 0 1 2 3))

(a) Schaue dir den obigen Code an und stelle sicher, dass du verstehst, wie dieser funktioniert. Führe den Code anschließend in Racket aus.


Um nicht für alle Operationen auf einer Liste 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 einer Liste beispielsweise auch wie folgt erhöhen:

(map (lambda (x) (+ x 1)) (list 0 1 2 3))

(b) Führe den Ausdruck in der REPL aus und vergleiche das Ergebnis mit dem Ergebnis aus Aufgabenteil (a).

(c) Vergleiche den ersten Operanden des map-Ausdrucks mit der definierten Funktion aus Aufgabenteil (a). Wo findest du Gemeinsamkeiten und wo Unterschiede?

(d) Verändere den obigen Ausdruck so, dass dieser die Zahlen erst um zwei erhöht und anschließend verdreifacht.

(e) Schreibe einen map-Ausdruck, der die Celsius-Liste aus Aufgabe 2 in Kelvin umrechnet. Integriere dabei die Funktionslogik in den map-Ausdruck.
Umrechnung: $K = {^{\circ}C} + 273,15$

Suche

v
100.137.3.3.1 Die Listenfunktion map und anonyme Funktionen
Kopieren durch Anklicken

Rückmeldung geben