Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
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 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

Ergänze die Implementierung und teste sie.

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

Experimentiere mit den Beispielen in der REPL und beschreibe wann man den Pipe-Operator verwenden kann.

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.

Suche

v
8.2.2.4.1.1.4
dev.inf-schule.de/deklarativ/fp_elm/elm_programme/teilausdruecke/umkehrverfahren/lernstrecke/pipeoperator
dev.inf-schule.de/8.2.2.4.1.1.4
dev.inf-schule.de/@/page/4rcak3OnagZSoHKL

Rückmeldung geben