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 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 = String.reverse (String.right laenge text)
in
linkerTeilUmgekehrt ++ mittlererTeilUmgekehrt ++ rechterTeilUmgekehrt
Die folgende Abbildung verdeutlicht das Hintereinderschalten von Funktionen bei der Bestimmung der Umkehrung der Teilzeichenketten.
Aufgabe 1
Erkläre anhand der Abildung das Hintereinderschalten von Funktionen bei der Bestimmung der Umkehrung der Teilzeichenketten.
Den Pipe-Operator verwenden
Beim Hintereinderschalten von Funktionen wird im vorliegenden Beispiel das Ergebnis einer Funktionsanwedung an die nächste Funktion weitergereicht.
Wenn beim Weiterreichen das Ergebnis einer Funktionsanwendung immer an den letzten Parameter der nächsten Funktionsanwendung erfolgt,
dann kann man den Ausdruck auch mit dem Pipe-Operator |>
darstellen. In der nächsten Abbildung ist
der pipe-Operator grün hervorgehoben.
Aufgabe 2
Ergänze im folgenden Quelltext den noch fehlenden Teil und teste anschließend die Funktion mit mehreren Aufrufen.
verschluesselterText text laenge =
let
linkerTeilUmgekehrt = String.left laenge text |> String.reverse
mittlererTeilUmgekehrt = String.dropLeft laenge text |> String.dropRight laenge |> String.reverse
rechterTeilUmgekehrt = ...
in
linkerTeilUmgekehrt ++ mittlererTeilUmgekehrt ++ rechterTeilUmgekehrt
Aufgabe 3
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.
Quellen
- [1]: Hintereinderschalten von Funktionen - Urheber: KB - Lizenz: inf-schule.de
- [2]: Verwendung des Pipe-Operators - Urheber: KB - Lizenz: inf-schule.de