-- Family relationships {- Structure of the family: Christine oo Heinz Maria oo Fritz / \ | / \ | Monika oo Herbert Angelika oo Hubert / \ | / \ | Susanne Norbert Andreas -} data Person = Christine | Heinz | Maria | Fritz | Monika | Herbert | Angelika | Hubert | Susanne | Norbert | Andreas deriving (Eq,Show) -- Ergebnis: Ehemann einer Person ehemann :: Person -> Person ehemann Christine = Heinz ehemann Maria = Fritz ehemann Monika = Herbert ehemann Angelika = Hubert -- Mutter einer Person: mutter :: Person -> Person mutter Herbert = Christine mutter Angelika = Christine mutter Hubert = Maria mutter Susanne = Monika mutter Norbert = Monika mutter Andreas = Angelika -- Vater einer Person: vater :: Person -> Person --vater kind = ehemann (mutter kind) vater = ehemann . mutter -- Grossvater eines Enkels: grossvater :: Person -> Person -> Bool grossvater e g | g == vater (vater e) = True | g == vater (mutter e) = True | otherwise = False -- Nicht formulierbar: -- Welche Kinder hat Herbert? -- > vater kind == Herbert --> kind = Susanne oder kind = Norbert -- Welche Großväter hat Andreas? -- > grossvater Andreas opa --> opa = Heinz oder opa = Fritz