2011-05-17 22 views
13

La documentación para scanl dice "esta función se fusionará". ¿Qué significa exactamente fusible aquí? ¿Es mala?¿Qué significa "esta función se fusionará"?

+7

+1 "¿Es malo?" – sehe

+2

Para obtener una idea de cómo funciona, [consulte el documento] (http://www.cse.unsw.edu.au/~dons/papers/stream-fusion.pdf). Es una buena lectura. – hammar

Respuesta

13

http://www.haskell.org/haskellwiki/Short_cut_fusion

(y, para más información: http://www.haskell.org/haskellwiki/Correctness_of_short_cut_fusion)

Si una función se fusionan, es una buena cosa. Significa que una cadena de funciones se puede fusionar en una función, lo que significa menos asignación, menos acumulación y más velocidad. ¡Increíble!

Aquí hay una fusión trivial: map f . map g ---->map (f . g).

Como se detalló anteriormente, hay muchas otras que también son aplicadas por las REGLAS de la biblioteca estándar.

+2

En este caso, fusión de secuencia. Mejor que la fusión de atajo ;-) –

3

Es como corutinas: si se componen dos funciones, pueden ejecutarse en una secuencia fusionada en lugar de una que se evalúa por completo primero y luego la segunda.

What is Haskell's Stream Fusion

+0

Al igual que los detalles de esa secuencia, no tenemos la fusión de secuencias de forma predeterminada. En cambio, tenemos todo lo que se llama fusión build/foldr (o fusión de acceso directo), en el que, véanse los enlaces que he proporcionado más arriba. Fusion es increíble, y la fusión de secuencias es más impresionante que la compilación/plegado, pero, como recuerdo, hay algunos casos extremos no resueltos que impidieron su adopción en las librerías estándar. Mientras tanto, otras librerías como 'Text' y' Vector', como reall, * do * usan la fusión de secuencias. – sclv

2

Supongo que se refiere a las técnicas de optimización de fusión de flujo y afirma que se pueden aplicar a la función. Básicamente, si tiene dos funciones que transforman las secuencias, el optimizador combinará las transformaciones para que solo se requiera un cruce.

En resumen, no, no está mal. ¡Todo lo contrario!

Cuestiones relacionadas