Übungen: Currying und partielle Funktionsanwendung
Aufgabe 1: Programmmitteilungen
Für eine neue Software soll den Benutzenden für bestimmte Ereignisse Ausgaben auf dem Bildschirm angezeigt werden. Die Ausgaben sollen dabei immer der folgenden Form entsprechen:
Ereignistyp: Mitteilung |
Ereignistyp | Nutzungsfall |
---|---|
Fehler | Eine Mitteilung, die angibt, dass eine Operation des Programms nicht erfolgreich durchgeführt werden konnte. |
Warnung | Eine Mitteilung, die auf mögliche Probleme hinweist. |
Info | Eine Mitteilung, die Informationen über den Stand des Programmes liefert. |
Tipp | Eine Mitteilung, die den Benutzenden Tipps für die Verwendung des Programms liefert. |
Fehler: Datei konnte nicht gefunden werden |
Info: Download abgeschlossen |
(a) Erstelle eine geeignete gecurryte Funktion, die dir bei Übergabe des Ereignistyps und der Mitteilung
eine korrekt formatierte Ausgabe zurückgibt.
(b) Definiere durch eine partielle Funktionsanwendung vier geeignete Funktionen, die die verschiedenen Ereignistypen abdecken.
Aufgabe 2: Zeichenersetzen
Eine hilfreiche Funktionalität beim Arbeiten mit Texten ist die Möglichkeit, ausgewählte Zeichen durch andere Zeichen zu ersetzten. Ein möglicher Racket-Aufruf könnte wie folgt aussehen:
(ersetze-durch "H" "M" "Haus")
;gewünschtes Ergebnis: "Maus"
(ersetze-durch "r" "o" "Brot")
;gewünschtes Ergebnis: "Boot"
(a) Erstelle eine geeignete gecurryte Funktion, die dir analog zum obigen Beispiel einzelne Zeichen durch andere Zeichen
ersetzt.
Tipp: Die Funktion string->strings-list
wandelt einen String in eine Liste um, in der
jedes Zeichen einzeln als String gespeichert ist. Mit einem geeignete fold
-Ausdruck, kann man daraus
wieder einen zusammenhängenden String erzeugen.
(b) Definiere durch eine partielle Funktionsanwendung eine Funktion, die alle Leerzeichen durch Unterstriche ersetzt.
(c) Definiere durch partielle Funktionsanwendungen geeignete Funktionen, die die deutschen Umlaute entsprechend der Tabelle umwandeln:
Umlaut | Zu ersetzen durch |
---|---|
ä | ae |
ö | oe |
u | ue |
ß | ss |
(d) Definiere dir eine Funktion, die alle deutschen Umlaute für einen übergeben String umwandelt.
Teste deine Implementation anhand des folgenden Satzes:
(define satz
"Die größte Verblüffung für den müden Schüler war der glänzende Löwe.")