i

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:

Grundidee map Funktion

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

Teste das selbst in der REPL. Untersuche die Signatur der Funktion 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

Teste die Funktion. Sage die Signatur der Funktion voraus und überprüfe in der REPL.

Ä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:

Grundidee flter

In Elm lässt sich dies so programmieren:

> List.filter mindestensGut notenliste
[14,12,10,15,13,10,12]
    : List number

Aufgabe 4

Teste das selbst in der REPL. Untersuche die Signatur der Funktion List.filter in der REPL und erkläre.

Aufgabe 5

Schreibe eine Funktion, die eine Notenliste übergeben bekommt und die Anzahl der mindestens guten Noten zurück gibt.

Aufgabe 6

Schreibe eine Funktion, die eine Notenliste übergeben bekommt und die Anzahl der Noten, die nicht mehr ausreichend sind, zurück gibt.

Suche

v
8.2.2.3.1.1.5
www.inf-schule.de/deklarativ/fp_elm/elm_programme/listen/notenliste/lernstrecke/funktionenalsparameter
www.inf-schule.de/8.2.2.3.1.1.5
www.inf-schule.de/@/page/yxeBic24dhVpX7Du

Rückmeldung geben