home Funktionale Programmierung: Funktionen und Kombinatoren Prof. Dr. Uwe Schmidt FH Wedel

Funktionen und Kombinatoren

weiter

weiter

Funktionen und Funktionskombinatoren

Kombinatoren
Komposition
(.)     :: (b -> c) -> (a -> b) -> (a -> c)
g . f   =  \ x -> g (f x)
 
f4      = f3 . f2 . f1
weiter
Komposition (vertauscht)
(>>>)   :: (a -> b) -> (b -> c) -> (a -> c)
f >>> g =  \ x -> g (f x)
 
-- oder
 
f >>> g = g . f
 
f4      = f1 >>> f2 >>> f3
weiter
flip
flip    :: (a -> b -> c) -> (b -> a -> c)
flip f  =  \ x y -> f y x
 
(>>>)  = flip (.)
weiter
Kombinatoren
für Paare
(&&&)
(&&&)   :: (a -> b) -> (a -> c) -> (a -> (b, c))
f &&& g = \ x -> (f x, g x)
 
f6      = (`div` 3) &&& (`mod` 3)
weiter
merke
Das Argument wird 2 mal verarbeitet
(***)
(***)   :: (a -> c) -> (b -> d) -> ((a, b) -> (c, d))
f *** g = \ (x, y) -> (f x, g y)
 
f7      = (* 2) *** (+ 1)
f8      = f6 >>> f7
weiter
uncurry
uncurry   :: (a -> b -> c) -> ((a, b) -> c)
uncurry f = \ (x, y) -> f x y
 
f9      = uncurry (+)
f10     = f6 >>> f7 >>> f9
weiter
merke
2 Argumente werden verarbeitet
gut
Funktionalität kann auf flexible Art sehr kommpakt zusammengesetzt werden.
merke
Erweiterbarkeit: Kombination von Funktionen mit IO?
schlecht
Monaden: Code muss vollständig umgeschrieben werde (do-Notation, >>=)
gut
Arrows: Code muss nicht umgeschrieben werden
Beispiele

Letzte Änderung: 27.03.2015
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel