Eine Fallunterscheidung
Zeichenketten vergleichen
Wir betrachten hier die Situation, dass Datumsangaben durch Zeichenketten dargestellt werden. Das kommt in der Praxis oft vor, wenn eine Datumsangabe textuell in ein Eingabefeld eingetragen wird.
Zeichenketten kann man - genau wie Zahlen - vergleichen. Der folgende Dialog in der REPL zeigt einige Beispiele
> "Hund" < "Katze"
True : Bool
> "hund" < "Katze"
False : Bool
> "hund" < "katze"
True : Bool
Aufgabe 1
Probiere das selbst aus. Versuche mit weiteren Experimenten herauszufinden, wie der Vergleich funktioniert.
Aufgabe 2
Wenn Datumsangaben durch Zeichenketten vom Typ String
dargestellt werden, dann ist hierüber auch ein Vergleich möglich.
Analysiere die folgenden Beispiele. Kläre mit weiteren Experimenten, welches Datumsformat für einen Vergleich günstiger ist - das Format
"tt.mm.jjjj" oder das Format "jjjj-mm-tt" (hier stehen t, m und j für irgendwelche sinnvollen Ziffern bei Datumsangaben).
> "20.1.2012" <= "01.01.2013"
False : Bool
> "01.01.2013" <= "21.02.2014"
True : Bool
> "2011-03-03" <= "2008-12-31"
False : Bool
Das Minimum bestimmen
Hier soll jetzt das ältere von zwei Datumsangaben bestimmt werden, die im Format Format "jjjj-mm-tt" angegeben sind.
Übergabe: - Datum 1: "2011-03-03" - Datum 2: "2008-12-31" Rückgabe: - Minimum der beiden Daten (d.h. am ältesten): "2008-12-31"
Zur Implementierung mit einer Funktion nutzt man einen if-then-else
-Ausdruck.
minimum a b =
if a <= b then a else b
> minimum 3 5
3 : number
> minimum "2011-03-03" "2008-12-31"
"2008-12-31" : String
> minimum "hund" "Katze"
"Katze" : String
Aufgabe 3
(a) Analysiere und erkläre die Funktionsdefinition.
(b) Interessant ist, dass die Funktion minimum
auf Zahlen und Zeichenketten angewandt werden kann. Probiere das mit weiteren Beispielen
in der REPL aus.
(c) Entwickle analog eine Funktion maximum
und teste sie in der REPL.
Einen Vergleich darstellen
Mit der Funktion vergleich
soll der Vergleich von zwei Zeichenketten textuell dargestellt werden.
Hier zwei mögliche Implementierungen.
Version 1:
vergleich a b =
if a <= b then
a ++ " <= " ++ b
else
a ++ " >= " ++ b
Version 2:
vergleich a b =
a ++ (if a <= b then " <= " else " >= ") ++ b
Aufgabe 4
(a) Teste, was die Funktion vergleich
in den beiden Versionen leistet.
(b) Erkläre anhand von Version 2, dass man einen if
-Ausdruck wie andere Ausdrücke auch als Teilausdruck verwenden kann.
Aufgabe 5
Mit der Funktion vergleichDaten
sollen Datumsangaben verglichen werden. 3 Fälle sind dabei mögliche: Datum 1 liegt vor Datum 2 oder
Datum 1 ist identisch mit Datum 2 oder Datum1 liegt nach Datum 2.
Übergabe: - Datum 1: "2011-03-03" - Datum 2: "2011-03-03" Rückgabe: - Vergleich der beiden Daten: "2011-03-03 ist identisch mit 2011-03-03"
Entwickle eine Definition für die Funktion vergleichDaten
und teste sie in der REPL.
Beachte, dass du hier mehrere Fallunterscheidungen kombinieren musst.