Partielle Funktionsanwendung
Flexiblere Erhöhung der Noten
Es sollen verschiedene Erhöhungen der Noten getestet werden. Ein erster Ansatz könnte darin bestehen, dass man entsprechend viele Funktionen definiert:
erhoehenUm1 note =
min 15 (note + 1)
erhoehenUm2 note =
min 15 (note + 2)
erhoehenUm3 note =
min 15 (note + 3)
...
Diese Funktionen können wir anwenden, um die Notenliste um einen bestimmten Wert zu erhöhen:
> List.map erhoehenUm1 notenliste
[15,8,13,11,15,5,9,14,11,8,6,3,10,10,13]
: List number
> List.map erhoehenUm4 notenliste
[15,11,15,14,15,8,12,15,14,11,9,6,13,13,15]
: List number
Offensichtlich ist dieser Ansatz nicht optimal, da man viele verschiedene Funktionen mit fast identischem Aufbau definiert. Es macht Sinn stattdessen eine Funktion zu definieren, die als weiteren Parameter den Wert, um den die Noten erhöht werden sollen, erhält.
erhoehenUm wert note =
min 15 (note + wert)
Aufgabe 1
List.map
eine Liste mit erhöhten Notenwerten zu berechnen.Argumentiere mit der Zahl der Parameter, die wir bräuchten und der Zahl der Parameter, die wir haben.
Experimente in der REPL
Die folgenden Experimente helfen uns einen Weg zu finden, wie wir mit Hilfe der allgemeineren
Funktion erhoehenUm
dennoch unsere Aufgabe lösen können.
> erhoehenUm
...
> erhoehenUm 2
...
> f = erhoehenUm 2
...
> f
...
> f 9
...
> f 14
...
> List.map f notenliste
...
> (erhoehenUm 2) 9
...
> (erhoehenUm 2) 14
...
> List.map (erhoehenUm 2) notenliste
...
Beim Ausdruck erhoehenUm 2
wird die Funktion erhoehenUm
mit einem Teil
der notwendigen Parameter aufgerufen. Man spricht von partieller Funktionsanwendung.
Aufgabe 2
Aufgabe 3
Flexible Analyse der Noten
Die Analyse der Noten soll ebenfalls flexibler werden. Dazu definieren wir folgende Funktionen:
noteUeber wert note =
note > wert
noteZwischen von bis note =
von <= note && note <= bis