comparison exercises/src/Exercise_15.hs @ 39:9a7b9e0c9eb0 default tip

week 15 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Fri, 08 Feb 2013 00:06:20 +0100
parents a10156e1609a
children
comparison
equal deleted inserted replaced
38:a10156e1609a 39:9a7b9e0c9eb0
11 - Module, Typlassen, Instanzen 11 - Module, Typlassen, Instanzen
12 - Datentypen: data vs. type vs. newtype, Abstraktionsfunktionen 12 - Datentypen: data vs. type vs. newtype, Abstraktionsfunktionen
13 - (Huffman, Parser) 13 - (Huffman, Parser)
14 - Lazy Evaluation: Redexes, Outside In, Unendliche Datenstrukturen 14 - Lazy Evaluation: Redexes, Outside In, Unendliche Datenstrukturen
15 - IO: do-Notation, warum die Sonderbehandlung? 15 - IO: do-Notation, warum die Sonderbehandlung?
16 - (Endrekursion und Akkumulatoren) 16 - Endrekursion und Akkumulatoren
17 -} 17 -}
18
19
20 -- $
21 -- f (g x) == f $ g x
22 -- f $ g $ h $ i x == f . g . h $ i x == (f . g . h . i) x
23
24 doubleAllEven xs = map (*2) (filter even xs)
25 doubleAllEven' xs = map (*2) $ filter even xs
26
27
28
29 -- Unendliche Datenstrukturen
30 nats = [1..]
31 nats' = 1 : map (+1) nats'
32
33 fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
34
35
36
37 -- (.).(.)
38 -- f (g x y) == (f ((.).(.)) g) x y
39 oo :: (c -> d) -> (a -> b -> c) -> a -> b -> d
40 oo = (.).(.)
41 oo' w = ((.) . (.)) w
42 oo'' w = (.) ((.) w)
43 oo''' w x = (.) ((.) w) x
44 oo'''' w x = ((.) w) . x
45 oo''''' w x y = (((.) w) . x) y
46 oo'''''' w x y = w . (x y)
47 oo''''''' w x y z = (w . (x y)) z
48 oo'''''''' w x y z = w (x y z)
49
50
51
52 -- map, fold
53 -- [f x y | x <- xs, y <- ys, p y]
54 -- == concatMap (\x -> map (\y -> f x y) (filter p ys)) xs
55
56 map' :: (a -> b) -> [a] -> [b]
57 map' f xs = [f x | x <- xs]
58
59 map'' f = foldr g []
60 where
61 g x xs = (f x) : xs
62 -- == (:) (f x)-}
63 -- == ((:) . f)-}
64
65 map''' f = foldl (\xs x -> xs ++ [f x]) []
66
67 foldl' :: (a -> b -> a) -> a -> [b] -> a
68 foldl' _ acc [] = acc
69 foldl' f acc (x : xs) = foldl' f (f acc x) xs
70
71 foldr' _ acc [] = acc
72 foldr' f acc (x : xs) = f x (foldr' f acc xs)
73
74 filterMap :: (a -> Maybe b) -> [a] -> [b]
75 filterMap _ [] = []
76 filterMap f (x:xs) =
77 case (f x) of
78 Nothing -> filterMap f xs
79 Just y -> y : filterMap f xs
80
81
82
83 -- type vs. newtype vs. data
84 type Name = String
85 greet :: Name -> String
86 greet n = "Hallo, " ++ n ++ "!"
87
88 newtype Address = Address String
89 askForTheWay (Address a) = "How do I get to " ++ a ++ "?"
90
91 data MyList a = Empty | Element a (MyList a) deriving (Eq)
92 instance Show a => Show (MyList a) where
93 show Empty = "[]"
94 show (Element a xs) = show a ++ ":" ++ show xs
95
96 myLength :: (MyList a) -> Int
97 myLength Empty = 0
98 myLength (Element _ xs) = 1 + myLength xs
99
100
101
102 -- Baumdefinitionen
103 data BinaryTree a = Empty | Node a (BinaryTree a) (BinaryTree a)
104
105 data ArbitraryTree a = Empty | Node a [ArbitraryTree a]