Funktionen höherer Ordnung
Ähnlichkeiten zwischen String und List
Auch wenn die Datentypen String
und List Char
nicht die selben
sind, gibt es doch einige Ähnlichkeiten zwischen Zeichenketten und Listen von Zeichen.
Deshalb gibt es einige Funktionen - darunter auch Funktionen höherer Ordnung,
die in den Modulen String
und List
existieren.
Beispiele für solche Funktionen sind String.map
und
String.filter
.
Aufgabe 1
(a) Überlege welche Signatur die Funktion String.map
haben muss
und überprüfe in der REPL. Vergleiche mit der Signatur von
List.map
.
(b) Schreibe mit Hilfe der Funktion String.map
einen Ausdruck, der
eine Zeichenkette nach dem Caesar-Verfahren verschlüsselt.
Caesar für Großbuchstaben
Das Caesar-Verfahren funktioniert - zumindest in unserer Variante - nur für Großbuchstaben. Wenn du andere Zeichen eingibst, erhältst du zwar Zeichen, diese machen aber keinen Sinn. Mit Hilfe einer Funktion, die erkennt, ob ein Zeichen ein Großbuchstabe ist, kannst du die gültigen Zeichen filtern.
istGrossbuchstabe : Char -> Bool
istGrossbuchstabe zeichen =
-- ist Zeichen zwischen 'A' und 'Z'?
Aufgabe 2
istGrossbuchstabe
und nutze sie, um einen
Ausdruck zu schreiben, der eine beliebige Zeichenkette nach dem Caesar-Verfahren
verschlüsselt. Alle Zeichen außer Großbuchstaben sollen ignoriert werden.
Der Aufruf des Ausdrucks soll also z.B. folgendes Ergebnis liefern:
> ... "HALLO - ja, ich sage: HALLO"
"KDOORKDOOR" : String