digamos que tenemos el siguiente:Haskell: Lista de fusión, ¿dónde se necesita?
l = map f (map g [1..100])
y queremos hacer:
head l
por lo que tenemos:
head (map f (map g [1..100]))
Ahora, tenemos que el primer elemento de esta. map
se define algo así:
map f l = f (head l) : (map f (tail l))
Entonces obtenemos:
f (head (map g [1..100]))
y luego se aplica una vez más:
f (g (head [1..100]))
que se traduce en
f (g 1)
Sin intermedia li Los pts están formados, simplemente debido a la pereza.
¿Este análisis es correcto? Y con estructuras simples como esta:
foldl' ... $ map f1 $ map f2 $ createlist
¿Alguna vez se crearon listas intermedias, incluso sin "lista de fusión"? (Creo que la pereza debería eliminarlos trivialmente).
El único lugar donde puedo ver una razón para mantener una lista es que si lo hicimos:
l' = [1..100]
l = map f (map g l')
donde puede ser que desee mantener l'
, si se utiliza en otros lugares. Sin embargo, en el caso l'
aquí arriba, el compilador debería ser bastante trivial para darse cuenta de que es más rápido simplemente recalcular la lista anterior que almacenarla.