Podríamos fusionamos dos recorridos más de la lista xs
en la expresión¿Cómo puedo fusionar dos mapas en la misma lista?
(map f xs, map g xs)
al igual que
unzip (map (\x -> (f x, g x)) xs)
¿Hay alguna reasearch en la realización de este tipo de fusión de forma automática?
(Hay un riesgo de crear una fuga de espacio aquí, si una de las listas devueltas se consume antes que el otro estoy más interesado en la prevención del recorrido extra sobre xs
que el ahorro de espacio..)
Edit: De hecho, no estoy buscando aplicar la fusión a las listas reales de Haskell en memoria, donde esta transformación podría no tener sentido dependiendo de si el unzip
se puede fusionar con su (s) consumidor (s). Tengo una configuración donde sé que unzip
puede fusionarse (ver "FlumeJava: tuberías de datos paralelas fáciles y eficientes").
No es automático, pero bastante agradable de todos modos: http://squing.blogspot.com/2008/11/beautiful-folding.html –
A menos que el resultado de esto se fusione con otra cosa, la sobrecarga de crear los pares y descomprimirlos ser más grande que el costo del recorrido extra. – augustss
@augustss ¡No si el cruce está sobre un archivo enorme! No estoy planeando aplicar esto a listas reales. – tibbe