i

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.

Hintereinderschalten von Funktionen[1]

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.

Verwendung des Pipe-Operators[2]

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

Suche

v
110.2.3.1.1.4
inf-schule.de/fp_elm_alteversion/elm_programme/teilausdruecke/umkehrverfahren/lernstrecke/pipeoperator
inf-schule.de/110.2.3.1.1.4
inf-schule.de/@/page/4rcak3OnagZSoHKL

Rückmeldung geben