2010-03-21 24 views
19

Realmente deseo que Google era mejor en la búsqueda de sintaxis:¿Qué significa un tope o punto o punto (.) En Haskell?

decades   :: (RealFrac a) => a -> a -> [a] -> Array Int Int 
decades a b  = hist (0,9) . map decade 
        where decade x = floor ((x - a) * s) 
         s  = 10/(b - a) 
+2

Un período también puede ser un separador de espacio de nombres (por ejemplo, 'Data.Vector.Unboxed .length'). – kennytm

+7

Para buscar información sobre el código Haskell, recomiendo sinceramente Hoogle (http://www.haskell.org/hoogle/), un motor de búsqueda de tipos (por ejemplo, buscar '(a -> b) -> [a] - > [b] 'muestra' map') y los nombres de función/operador (por lo que la búsqueda de 'map' hace aparecer' map', y al buscar '.' aparece el operador de composición de la función Prelude' (.) '). ¡También hay Hayoo! (http://holumbus.fh-wedel.de/hayoo/hayoo.html), que tiene menos énfasis en los tipos pero indexa más paquetes. –

+1

posible duplicado de [Operador de puntos en Haskell: necesita más explicación] (http://stackoverflow.com/questions/631284/dot-operator-in-haskell-need-more-explanation) –

Respuesta

46

f(g(x))

es

en matemáticas: f ∘ g(x)

en Haskell: (f . g)(x)

2

Es una composición de funciones: link

16

Significa la composición de funciones. Ver this question.

Tenga en cuenta también que f.g.h x no es equivalente a (f.g.h) x, porque se interpreta como f.g.(h x) que no se marcará a menos que (h x) devuelva una función.

Aquí es donde el operador $ puede ser útil: f.g.h $ x convierte x de un parámetro a h en un parámetro para toda la expresión. Y entonces se convierte en equivalente a f(g(h x)) y la tubería funciona nuevamente.

+5

Solo tiene que recordar que la función operador de aplicaciones (espacio) tiene la más alta prioridad. Después de un tiempo, todo tendrá sentido. –

3

"El período es un operador de composición de funciones. En términos generales, donde f y g son funciones, (fg) x significa lo mismo que f (gx). En otras palabras, el período se usa para tomar el resultado de la función de la derecha, alimentarlo como un parámetro a la función de la izquierda, y devolver una nueva función que representa este cálculo ".

Fuente: Google search 'haskell period operator'

1

Function composition (la página es bastante largo, el uso de búsqueda)

+1

Mire este complemento: https://addons.mozilla.org/en-US/firefox/addon/416 – Casebash

+0

Más adecuado como comentario. – Sid

12

. es una función de orden superior para la composición de funciones.

Prelude> :type (.) 
(.) :: (b -> c) -> (a -> b) -> a -> c 
Prelude> (*2) . (+1) $ 1 
4 
Prelude> ((*2) . (+1)) 1 
4 
Cuestiones relacionadas