Mustererkennung
Cons-Operator
Vor einiger Zeit hast du die beiden Listen-Operatoren ++
und ::
kennengelernt.
Der Operator ++
fügt zwei Listen zusammen,
während der Operator ::
ein Element an den Anfang einer Liste hängt.
> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6] : List number
> 1 :: [2, 3, 4]
[1, 2, 3, 4] : List number
Vermutlich hast du den ::
-Operator nicht so oft verwendet.
Er wird auch Cons-Operator
genannt,
weil man mit ihm eine Liste erzeugen, also konstruieren kann.
> 1 :: 2 :: 3 :: []
[1, 2, 3] : List number
Man kann den Cons-Operator allerdings auch verwenden, um eine Liste bei der Mustererkennung in einem case-Ausdruck zu zerlegen:
listenanalyse : List a -> String
listenanalyse liste =
case liste of
[] ->
"Liste ist leer"
anfang :: rest ->
"Liste enthält mindestens ein Element und (möglicherweise leere) rest-Liste"
Beachte die Typvariable a
in der Signatur von listenanalyse
,
da wir keine Aussage über die Elemente der Liste machen wollen.
Aufgabe 1
Teste die Funktion listenanalyse
mit verschiedenen Listen
in der REPL.
Aufgabe 2
Verändere die Funktion listenanalyse
so, dass sie
sich folgendermaßen verhält:
> listenanalyse []
"Liste ist leer" : String
> listenanalyse ["Hallo"]
"Hallo und 0 weitere Elemente" : String
> listenanalyse ["Hallo", "wie", "geht es?"]
"Hallo und 2 weitere Elemente" : String