Verarbeitung von Tupel
Mustererkennung verwenden
Die Mustererkennung erfolgt bei Tupel völlig analog zu Records.
Aufgabe 1
(a) Analysiere und erkläre die Definition der Funktion textAusgabe
.
(b) Ergänze den Text um die Ausgabe der Uhrzeit.
module Metadaten exposing (..)
type alias Datum = (Int, Int, Int)
type alias Zeit = (Int, Int)
type alias Position = (Int, Int, Int)
type alias Metadaten =
{
datum: Datum,
uhrzeit: Zeit,
breitengrad: Position,
laengengrad: Position
}
metadatenFoto1: Metadaten
metadatenFoto1 = { datum = (9, 8, 2022), uhrzeit = (15, 35), breitengrad = (50, 56, 28), laengengrad = (6, 57, 21) }
textAusgabe: Metadaten -> String
textAusgabe datensatz =
let
{ datum, uhrzeit } = datensatz
( tag, monat, jahr ) = datum
( stunde, minute ) = uhrzeit
in
"Das Foto wurde am " ++ (String.fromInt tag) ++ "." ++ (String.fromInt monat) ++ "." ++ (String.fromInt jahr) ++ " gemacht."
> import Metadaten exposing (..)
> textAusgabe metadatenFoto1
"Das Foto wurde am 9.8.2022 gemacht." : String
Zugriffsfunktionen verwenden
Für Tupel gibt es auch vordefinierte Zugriffsfunktionen - jedoch nur für Tupel mit zwei Elementen. Das schränkt die Möglichkeiten für einen Zugriff mit Zugriffsfunktionen stark ein. Es ist daher in der Regel günstiger mit Mustererkennung zu arbeiten.
Aufgabe 2
(a) Analysiere und erkläre die Experimente in der REPL.
(b) Deute auch die Fehlermeldung.
module Metadaten exposing (..)
type alias Datum = (Int, Int, Int)
type alias Zeit = (Int, Int)
type alias Position = (Int, Int, Int)
type alias Metadaten =
{
datum: Datum,
uhrzeit: Zeit,
breitengrad: Position,
laengengrad: Position
}
metadatenFoto1: Metadaten
metadatenFoto1 = { datum = (9, 8, 2022), uhrzeit = (15, 35), breitengrad = (50, 56, 28), laengengrad = (6, 57, 21) }
> metadatenFoto1.uhrzeit
(15,35) : Zeit
> Tuple.first metadatenFoto1.uhrzeit
15 : Int
> Tuple.second metadatenFoto1.uhrzeit
35 : Int
> metadatenFoto1.datum
(9,8,2022) : Datum
> Tuple.first metadatenFoto1.datum
-- TYPE MISMATCH ---------------------------------------------------------- REPL
The 1st argument to `first` is not what I expect:
4| Tuple.first metadatenFoto1.datum
^^^^^^^^^^^^^^^^^^^^
The value at .datum is a:
Datum
But `first` needs the 1st argument to be:
( a, b )