Verwendung des Pipe-Operators
Funktionen hintereinander schalten
Wir verändern das Umkehrverfahren ein wenig. Wir benutzen eine zusätzliche Zahl, um die Länge der Anfangs- und Endteile einer Zeichenkette abzuspalten.
MORGEN 2 -> MO RG EN -> OM GR NE -> OMGRNE HITZEFREI 2 -> HI TZEFR EI -> IH RFEZT IE -> IHRFEZTIE HITZEFREI 3 -> HIT ZEF REI -> TIH FEZ IER -> TIHFEZIER
Ziel ist es, das so abgeänderte Umkehrverfahren mit einer Funktion
verschluesselterText
mit folgendem Verhalten zu implementieren.
Signatur:
verschluesselterText: String -> Int -> -> String
Beispiele:
verschluesselterText "MORGEN" 2 -> "OMGRNE"
verschluesselterText "HITZEFREI" 2 -> "IHRFEZTIE"
verschluesselterText "HITZEFREI" 3 -> "TIHFEZIER"
...
Hier der Ansatz für eine Implementierung der Funktion verschluesselterText
,
bei der zusätzlich zum Text auch eine Zerlegungslänge übergeben wird:
verschluesselterText text laenge =
let
linkerTeilUmgekehrt = String.reverse (String.left laenge text)
mittlererTeilUmgekehrt = String.reverse (String.dropRight laenge (String.dropLeft laenge text))
rechterTeilUmgekehrt = ...
in
...
Aufgabe 1
Den Pipe-Operator verwenden
Im obigen Code werden mehrere Funktionen hintereinandergeschaltet, wie z.B. zur Berechnung des mittleren Teils:
String.reverse (String.dropRight laenge (String.dropLeft laenge text))
Beim Hintereinderschalten von Funktionen wird im vorliegenden Beispiel das Ergebnis
einer Funktionsanwedung an die nächste Funktion weitergereicht.
In einigen Fällen kann man dann mit Hilfe des
Pipe-Operators eine alternative Schreibweise nutzen.
Der REPL-Dialog demonstriert einige Beispiele:
> String.toUpper "hallo" |> String.reverse
...
> String.toUpper "hallo" |> String.left 2 |> String.reverse
...
> 5 + 3 |> toFloat
...
> 5 + 3 |> modBy 2
...
> 5 + 3 |> modBy
...
> 5 + 3 |> (*) 2 |> (+) 1
...
Aufgabe 2
Aufgabe 3
Schreibe die Funktion verschluesselterText
mit Hilfe des Pipe-Operators um.
verschluesselterText text laenge =
let
linkerTeilUmgekehrt = ...
mittlererTeilUmgekehrt = ...
rechterTeilUmgekehrt = ...
in
...
Aufgabe 4
Das abgewandelte Verfahren liefert bei einer unvorsichtigen Wahl der Abspaltlänge merkwürdige Ergebnisse
(z.B.: > verschluesselterText "HITZEFREI" 6 -> "FEZTIHIERFEZ" : String
).
Untersuche und erkläre das.