Looking for haskell Answers? Try Ask4KnowledgeBase
Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageComposición de funciones


Observaciones

El operador de composición de función (.) Se define como

(.) :: (b -> c) -> (a -> b) ->  (a -> c)
(.)       f           g          x =  f (g x)     -- or, equivalently,  

(.)       f           g     =   \x -> f (g x)     
(.)       f     =    \g     ->  \x -> f (g x)      
(.) =    \f     ->   \g     ->  \x -> f (g x)      
(.) =    \f     ->  (\g     -> (\x -> f (g x) ) ) 

El tipo (b -> c) -> (a -> b) -> (a -> c) se puede escribir como (b -> c) -> (a -> b) -> a -> c porque -> en las firmas de tipo "asocia" a la derecha, correspondiente a la aplicación de función que asocia a la izquierda,

 f g x y z ...    ==    (((f g) x) y) z ...

Así que el "flujo de datos" es de derecha a izquierda: x "va" a g , cuyo resultado va a f , produciendo el resultado final:

(.)       f           g          x =  r
                                      where r = f (g x)  
-- g :: a -> b
-- f ::      b -> c
-- x :: a      
-- r ::           c   

(.)       f           g     =    q
                                 where q = \x -> f (g x) 
-- g :: a -> b
-- f ::      b -> c
-- q :: a      -> c

....

Sintácticamente, los siguientes son todos iguales:

(.) f g x  =  (f . g) x  =  (f .) g x  =  (. g) f x 

que es fácil de entender como las "tres reglas de las secciones del operador ", donde el "argumento faltante" solo entra en la ranura vacía cerca del operador:

(.) f g    =  (f . g)    =  (f .) g    =  (. g) f   
--         1             2             3  

La x , al estar presente en ambos lados de la ecuación, puede omitirse. Esto se conoce como eta-contracción. Por lo tanto, la forma sencilla de anotar la definición para la composición de la función es simplemente

(f . g) x   =   f (g x)

Esto, por supuesto, se refiere al "argumento" x ; cada vez que escribimos (f . g) sin la x se conoce como estilo sin puntos.

Composición de funciones Ejemplos relacionados