-- 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) -- 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 -- Enkel-Grossvater-Beziehung: Relation/Praedikat grossvater :: Person -> Person -> Bool grossvater e g | g == vater (vater e) = True | g == vater (mutter e) = True -- Wer ist der Vater von Andreas? -- > vater Andreas -- Ist Fritz ein Grossvater von Andreas? -- > grossvater Andreas Fritz -- NICHT: Welche Grossvaeter hat Andreas? -- > grossvater Andreas g -- hier ist g eine Variable -- Wunsch: g = Fritz -- predefined: -- solve True = True