Verarbeitung mit vordefinierten Funktionen
Einfügen und Entfernen von Daten
Es kommt oft vor, dass man neue Daten an bestimmten Stellen in eine Liste einfügen möchte oder dass man Daten an bestimmten Stellen wieder entfernen möchte. Wir lösen diese Probleme zuerst ganz allgemein. Danach kannst du die Lösungen auch auf Teilnehmerlisten anwenden.
Der REPL-Dialog verdeutlicht, was eine zu entwickelnde Funktion entfernenAnPos
leisten soll:
> entfernenAnPos 2 [1, 2, 3, 4]
[1,3,4] : List number
> entfernenAnPos 0 [1, 2, 3, 4]
[1,2,3,4] : List number
> entfernenAnPos 8 [1, 2, 3, 4]
[1,2,3,4] : List number
> entfernenAnPos 4 ["dann", "fehlt", "etwas", "in", "der", "Liste"]
["dann","fehlt","etwas","der","Liste"]
: List String
Der folgende Quelltext zeigt eine mögliche Implementierung mit Hilfe vordefinierter Listenfunktionen.
Beachte, dass mit List a
hier eine Funktion definiert wird, die auf Listen mit Elementen eines beliebigen Datentyps
anwendbar ist.
module Listenverarbeitung exposing (..)
entfernenAnPos: Int -> List a -> List a
entfernenAnPos pos liste =
let
vorher = List.take (pos-1) liste
nachher = List.drop pos liste
in
vorher ++ nachher
Aufgabe 1
(a) Analysiere die Definition der Funktion entfernenAnPos
und erkläre sämtliche Bestandteile.
(b) Teste die Funktion anschließend mit unterschiedlichen Funktionsaufrufen (so wie im oben gezeigten REPL-Dialog).
Aufgabe 2
Entwickle analog eine Definition zur Funktion einfuegenAnPos
. Der folgende REPL-Dialog verdeutlicht das gewünschte
Verhalten dieser Funktion.
> einfuegenAnPos 2 0 [1, 4, 5, 3]
[1,0,4,5,3] : List number
> einfuegenAnPos 1 0 [1, 4, 5, 3]
[0,1,4,5,3] : List number
> einfuegenAnPos 0 0 [1, 4, 5, 3]
[0,1,4,5,3] : List number
> einfuegenAnPos 8 0 [1, 4, 5, 3]
[1,4,5,3,0] : List number
> einfuegenAnPos 2 "o" ["T", "o", "o", "r"]
["T","o","o","o","r"]
: List String
Aufgabe 3
Teste die Funktionen entfernenAnPos
und einfuegenAnPos
auch mit Daten zu Teilnehmerlisten.