Verwendung lokaler Konstanten
Teilausdrücke auslagern
Hier noch einmal die Implementierung der Funktion verschluesselterText
zur Implementierung des Umkehrverfahrens für Zeichenketten mit gerader Länge:
verschluesselterText text =
String.reverse (String.left (String.length text // 2) text)
++ String.reverse (String.right (String.length text // 2) text)
Wir führen lokale Konstanten ein, um den gesamten Ausdruck in Teilausdrücke zu zerlegen:
verschluesselterText text =
let
halbeLaenge = String.length text // 2
linkerTeil = String.left halbeLaenge text
rechterTeil = String.right halbeLaenge text
in
String.reverse linkerTeil ++ String.reverse rechterTeil
Die Abbildung verdeutlicht die Grundidee dieser Zerlegung.
Aufgabe 1
(a) Erkläre die Rolle der lokalen Konstanten bei der Auslagerung von Teilausdrücken.
(b) Erläutere, welche Vorteile diese Auslagerung von Teilausdrücken hat.
(c) Teste die verbesserte Funktionsdefinition in der REPL.
Aufgabe 2
Betrachte den allgemeinen Fall, dass die Zeichenkette auch eine ungerade Länge haben kann.
In diesem allgemeinen Fall muss man zusätzlichen den mittleren Teil beschreiben.
Benutze weitere vordefinierte Funktionen wie z.B. String.dropLeft
und String.dropRight
, um das mittlere Zeichen zu beschreiben.
verschluesselterText text =
let
halbeLaenge = String.length text // 2
linkerTeil = String.left halbeLaenge text
rechterTeil = String.right halbeLaenge text
mittlererTeil = ...
in
...