Verarbeitung von Datensätzen über Mustererkennung
Mailadressen erzeugen
Wir betrachten noch einmal die folgende Übergabe-Rückgabe-Situation zur Erzeugung von Mailadressen.
Übergabe: - Datensatz: { vorname = "Anuk", nachname = "Franck", geburtsdatum = { tag = 6, monat = 6, jahr = 2006 } } Rückgabe: - Mailadresse: "Anuk.Franck@meineschule.de"
Ziel ist es wieder, eine hierzu passende Funktion mailadresse
zu entwickeln.
Signatur:
mailadresse: Person -> String
Beispiele:
mailadresse { vorname = "Anuk", nachname = "Franck", ... } -> "Anuk.Frank@meineschule.de"
Einen Zugriff auf Attributwerte kann man oft indirekt mit der Vorgabe von Mustern bewirken.
module Mailadressen exposing (..)
type alias Person =
{
vorname: String,
nachname: String,
geburtsdatum:
{
tag: Int,
monat: Int,
jahr: Int
}
}
person1: Person
person1 =
{
vorname = "Anuk",
nachname = "Franck",
geburtsdatum =
{
tag = 6,
monat = 6,
jahr = 2006
}
}
mailadresse: Person -> String
mailadresse datensatz =
let
{ vorname, nachname } = datensatz
in
vorname ++ "." ++ nachname ++ "@meine-schule.de"
> import Mailadressen exposing (..)
> mailadresse person1
"Anuk.Franck@meine-schule.de" : String
Aufgabe 1
Teste das selbst und erkläre den Aufbau der Funktionsdefinition.
Aufgabe 2
Das Muster kann auch direkt bei der Parameterangabe benutzt werden. Teste auch diese Version.
module Mailadressen exposing (..)
...
mailadresse: Person -> String
mailadresse { vorname, nachname } =
vorname ++ "." ++ nachname ++ "@meine-schule.de"
Aufgabe 3
Hier eine Version mit Mustervorgaben bei geschachtelten Records. Stelle eine Vermutung auf, was die Funktion mailadresse
leistet. Überprüfe mit
einem Funktionsaufruf in der REPL.
module Mailadressen exposing (..)
...
mailadresse: Person -> String
mailadresse datensatz =
let
{ vorname, nachname, geburtsdatum } = datensatz
{ tag, monat, jahr } = geburtsdatum
in
vorname ++ "." ++ nachname ++ "." ++ (String.fromInt jahr) ++ "@meine-schule.de"