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