i

Übungen

Aufgabe 1

Im folgenden REPL-Dialog wird eine Funktion ergebnis definiert.

> ergebnis op z1 z2 = op z1 z2
<function> : (a -> b -> c) -> a -> b -> c
> ergebnis (+) 2 3
...
> ergebnis (*) 2 3
...
> ergebnis (/) 5 2.5
...
> ergebnis (>=) 4 1  
...

(a) Stelle Vermutungen auf, was an Stelle der drei Punkte jeweils erscheint. Überprüfe, indem du den Dialog selbst führst.

(b) Erläutere, was die Funktion ergebnis leistet und warum sie eine Funktion höherer Ordnung ist.

Aufgabe 2

Der folgende Quelltext zeigt zwei Funktionsdefinitionen.

module FunktionenAlsDaten exposing (..)

einfuegen: number -> List number -> List number
einfuegen x liste =
    case liste of
        [] -> [x]
        e::rListe -> 
            if x <= e then x::e::rListe else e::(einfuegen x rListe)

sortieren: List number -> List number
sortieren liste =
    case liste of
        [] -> []
        e::rListe -> einfuegen e (sortieren rListe)

(a) Erkläre und verdeutliche anhand von Testaufrufen: Mit der Funktion einfuegen kann man eine Zahl an der "richtigen Stelle" in eine sortierte Liste einfügen.

(b) Erkläre und verdeutliche anhand von Testaufrufen: Mit der Funktion sortierien kann man eine Liste von Zahlen sortieren.

(c) Was ändert sich, wenn man den Vergleich <= in der Definition von einfuegen durch den Vergleich >= ersetzt? Probiere es aus und begründe das neue Verhalten.

(d) Verallgemeinere die Funktionsdefinitionen, indem du einen zusätzlichen Parameter für eine Vergleichsfunktion einführst.

Aufgabe 3

Hier geht es darum, Listen als Zeichenketten darzustellen. Die folgende Implementierung nutzt Funktionen höherer Ordnung.

listToStringRekursiv elementToString liste =
    case liste of
        [] ->
            ""
        erstesElement :: restListe ->
            (elementToString erstesElement) ++ "," ++ (listToStringRekursiv elementToString restListe)

listToString elementToString liste =
    "[" ++ (String.dropRight 1 (listToStringRekursiv elementToString liste)) ++ "]"

(a) Teste den folgenden Aufruf der Funktion listToString und erkläre, wie das Ergebnis zustande kommt.

> listToString String.fromInt [1,2,3]
...

(b) Wie muss man den Funktionsaufruf abändern, wenn man die Liste [1.0,2.5] in eine Zeichenkette umwandeln möchte? Teste und erläutere den Funktionsaufruf.

(c) Hier musst du aufpassen: Man möchte Listen aus Zeichenketten wie z.B. ["eins","zwei","drei"] in eine Zeichenkette umwandeln. Wie ist das mit der Funktion listToString möglich?

(d) Jetzt wird es richtig kompliziert: Man möchte Listen wie [[],[1],[2,3]] bestehend aus Listen von Int-Zahlen in eine Zeichenkette umwandeln. Wie ist das mit der Funktion listToString möglich?

Suche

v
110.2.11.3
inf-schule.de/fp_elm_alteversion/elm_programme/funktionenalsdaten/uebungen
inf-schule.de/110.2.11.3
inf-schule.de/@/page/DhbaaGXucOFCcaB5

Rückmeldung geben