4. Listen
4.1 Listen bauen
Listen sind ja ein Datentyp, der beliebig viele Elemente enthalten kann. Wenn wir also Code schreiben, dann wissen wir zum Zeitpunkt nicht, wie lang die Listen, mit denen wir arbeiten, sein werden. Wir müssen also mit endlichem Code beliebig große Listen verarbeiten können. Das geht letztendlich nur mit Rekursion. Ich stelle Ihnen jetzt ein paar Beispielfunktionen vor. Danach machen Sie bitte ein paar Übungen.
Beispiel 4.1
Ich will eine Funktion range a b
schreiben, die
mir die Liste aller natürlichen Zahlen von
range : Int -> Int -> List Int
range a b =
if a > b then
[]
else
a :: range (a + 1) b
Zur Erklärung: die Funktion gibt die Liste aller
natürlichen Zahlen range (a+1) b
die Liste
range 8 13
[8,9,10,11,12,13] : List Int
range 4 2
[] : List Int
Übungsaufgabe 4.1.1
Modifizieren Sie die obige Funktion, so dass im Fall
range 8 6
[8, 7, 6] : List Int
Übungsaufgabe 4.1.2
Schreiben Sie eine Funktion
repeat howOften what
, die eine Liste
erzeugt, die aus howOften
Elementen besteht,
die allesamt gleich what
ist:
repeat 4 "ja"
["ja","ja","ja","ja"] : List String
Übungsaufgabe 4.1.3 Schreiben Sie eine Funktion
datesFromTo dayFrom dayTo
die die Liste aller Daten von dayFrom
bis
einschließlich dayTo
erzeugt.
Verwenden Sie hier Date.tomorrow
als
Subroutine!
Übungsaufgabe 4.1.4
Schreiben Sie eine Funktion
isPrime : Int -> Bool
, die berechnet,
ob das Argument eine Primzahl ist. Schreiben Sie dann
eine Funktion
primesFromTo a b
, die die Liste aller
Primzahlen von