4. Listen
4.2 Listen verarbeiten
Im letzten Kapitel haben Sie gelernt, wie man Listen
mit Hilfe von ::
erstellt. Nun lernen
Sie, wie man Listen verarbeitet. Als erstes
Beispiel wollen wir eine Funktion, die
die Länge einer Liste berechnet.
Da es sich bei List a
um einen Custom-Typ
mit den beiden Konstruktoren []
und ::
handelt
(wobei ::
allerdings mit Infix-Schreibweise verwendet wird),
müssen Sie zum Verarbeiten der Liste
alle Konstruktoren mit einem case
-Ausdruck abfragen:
laenge : List a -> Int
laenge list =
case list of
[] ->
0
x :: restList ->
1 + laenge restList
und dann
laenge ["a", "e", "i", "o", "u"]
5 : Int
Übungsaufgabe
Schreiben Sie eine Funktion incrementAll : List Int -> List Int
,
die jede Zahl in der Liste um 1 erhöht:
incrementAll [1,3,5,8]
[2,4,6,9] : List Int
Ich zeige Ihnen nun einen weiteren primitiven Datentyp: Char
.
Dieser repräsentiert ein einzelnes Zeichen:
'b'
'b' : Char
Verwechseln Sie bitte nicht 'b'
und "b"
. Ersteres
ist ein Char
, letzteres ein String
der Länge 1.
Intern sinds Strings Arrays (so etwas wie Listen) von Chars. Sie können
einen String leicht in eine Liste aus Chars umwandeln und umgekehrt:
String.toList "hallo"
['h','a','l','l','o'] : List Char
String.fromList ['g','u','t','e','n',' ','M','o','r','g','e','n']
"guten Morgen" : String
Übungsaufgabe
Schreiben Sie eine Funktion kleinbuchstaben : String -> String
,
die einen String in lauter Kleinbuchstaben verwandelt.
Gehen Sie wie folgt vor: wandeln Sie den String in eine List Char
um. Schreiben Sie dann eine rekursive Funktion, die durch die Liste
geht und alles in Kleinbuchstaben umwandelt mit Hilfe von
Char.toLower
. Dann machen Sie aus Ihrer
List Char
wieder einen String
Im Ernstfall können Sie natürlich String.toLower
verwenden.
Die obige Übung diente eher dazu, Ihre rekursiven Programmierfähigkeiten
zu trainieren.
Für die nächste Augabe hilft Ihnen String.toLower
allerdings nicht:
Übungsaufgabe
Schreiben Sie eine Funktion toAltCaps : String -> String
,
die einen String in AltCaps umwandelt:
toAltCaps "Guten Morgen, Herr Professor"
"GuTeN MoRgEn, HeRr pRoFeSsOr" : String
Übungsaufgabe
Schreiben Sie eine Funktion
append : List a -> List a -> List a
,
die eine Liste hinten an eine bestehende anhängt:
append [1,3,5] [2,4,6]
[1,3,5,2,4,6] : List number
Übungsaufgabe
Schreiben Sie eine Funktion
umdrehen : List a -> List a
, die eine
Liste umdreht.
Schreiben Sie eine Wrapper-Funktion
erzeugenUndUmdrehen : Int -> Int
, die folgendes
macht: erzeugenUndUmdrehen n
erzeugt erst
die Liste [0,1,...,n-1]
; dann dreht sie sie um;
dann berechnet sie die Länge der Ergebnisliste (das ist wieder \(n\), schon
klar). Der Witz ist, dass Sie nun die Laufzeit Ihrer Funktion
erzeugenUndUmdrehen n
mit Herrn Schellenbergers
App schellenberger-measure-time.zip
messen können, wie im Stundenplaneintrag vom 23. Oktober 2023
beschrieben.