-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaufgabe12_17.hs
40 lines (30 loc) · 1003 Bytes
/
aufgabe12_17.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-- Aufgabe 12.17
data Person = PER Name Geschlecht Kinder deriving Show
type Name = String
type Kinder = [Person]
-- a)
benenne_um :: Person -> Name -> Person
benenne_um (PER _ geschlecht kinder) name = (PER name geschlecht kinder)
-- b)
data Geschlecht = Weiblich | Maennlich deriving Show
weiblich :: Person -> Bool
weiblich (PER _ Weiblich _) = True
weiblich (PER _ Maennlich _) = False
{- In the solution, it is written, the "==" operator can only be used,
- if "deriving (Show, Eq)" is written in the algebraic data type
-}
-- c)
nehme :: (Person -> Bool) -> [Person] -> [Person]
nehme _ [] = []
nehme person (x:xs)
| (person x) = [x] ++ (nehme person xs)
| otherwise = nehme person xs
-- The solution uses an if-then-else construct
toechter :: Person -> [Person]
toechter (PER x y kinder) = nehme weiblich kinder
-- d)
addiere :: [Int] -> Int
addiere [] = 1
addiere (x:xs) = x + (addiere xs)
nachfahren :: Person -> Int
nachfahren (PER x y kinder) = addiere (map nachfahren kinder)