Funktionen höherer Ordnung
Erhöhung der Punkte
Es wird überlegt die Noten der Kursarbeit um einen Punkt zu erhöhen, da die Bearbeitungszeit etwas knapp war.
Falls du schon mit imperativen Programmiersprachen wie Python oder Java (die beide auch einzelne Aspekte der funktionalen Programmierung unterstützen) gearbeitet hast, würdest du so eine Aufgabe üblicherweise mit einer Schleife lösen. In einer rein funktionalen Programmmiersprache gibt es keine Schleifen. Stattdessen benötigen wir eine Funktion, die auf jedes Listenelement angewandt werden kann. Die Funktion zum Erhöhen eines Elements können wir so definieren:
erhoehen note =
min 15 (note + 1)
Aufgabe 1
- Zeige durch Tests, dass die Funktion das gewünschte Ergebnis berechnet.
- Untersuche die Signatur der Funktion
min
in der REPL. - Lies in der Dokumentation des Moduls Basic, um herauszufinden, welche Datentypen zu der bisher unbekannten Typvariablen gehören.
In einer rein funktionalen Programmiersprache wie Elm denkt man folgendermaßen:
Bilde jedes Listenelement mit Hilfe der Funktion erhoehen
auf ein neues Listenelement ab, um eine neue Liste zu erstellen:
In Elm lässt sich dies so programmieren:
> List.map erhoehen notenliste
[15,8,13,11,15,5,9,14,11,8,6,3,10,10,13]
: List number
Eine Funktion wie List.map
, die eine Funktion als Parameter hat, nennt man
Funktion höherer Ordnung.
Es gibt auch Funktionen, die eine Funktion als Rückgabewert liefern. Auch diese nennt man
Funktionen höherer Ordnung.
Aufgabe 2
List.map
in der REPL und erkläre.
Der erste Parameter der Funktion List.map
ist die Funktion
erhoehe
an sich. Es wird die Funktion selbst übergeben, nicht
der Wert einer Anwendung der Funktion.
a
und b
stehen für beliebige, möglicherweise unterschiedliche Datentypen.
Eine genauere Analyse der Noten
Das ursprüngliche Notenbild vor der Erhöhung der Punkte soll nun genauer analysiert werden. Dazu sollen alle Noten, die mindestens im guten Bereich liegen, also alle Noten ab 10 Punkten gefundent werden. Wir nutzen dazu folgende Funktion:
mindestensGut note =
note >= 10
Aufgabe 3
Ähnlich wie beim Erhöhen der Note wenden wir die Funktion mindestensGut
an, um aus einer
bestehenden Liste eine neue Liste zu erzeugen.
Allerdings sollen nicht die Elemente der Liste auf neue Elemente abgebildet (map) werden,
sondern es sollen die Listenelemente gefiltert werden, die in der neuen Liste
enthalten sein sollen:
In Elm lässt sich dies so programmieren:
> List.filter mindestensGut notenliste
[14,12,10,15,13,10,12]
: List number
Aufgabe 4
List.filter
in der REPL und erkläre.