Potremmo fondiamo due attraversamenti sopra la lista xs
nell'espressioneCome posso unire due mappe sullo stesso elenco?
(map f xs, map g xs)
in questo modo
unzip (map (\x -> (f x, g x)) xs)
C'è reasearch sull'esecuzione di questa sorta di fusione automaticamente?
(C'è il rischio di creare una perdita di spazio qui se una delle liste restituiti si consuma prima che l'altro sono più interessato a prevenire l'attraversamento supplementare sopra xs
di risparmio di spazio..)
Edit: In realtà non sto cercando di applicare la fusione alle attuali liste Haskell in memoria, dove questa trasformazione potrebbe non avere senso a seconda se lo unzip
può essere fuso con i suoi consumatori. Ho un'impostazione in cui so che il unzip
può fondersi (vedi "FlumeJava: pipeline parallele dati semplici ed efficienti").
Non automatico, ma abbastanza bello in ogni caso: http://squing.blogspot.com/2008/11/beautiful-folding.html –
A meno che il risultato di questo non si fonda con qualcos'altro, l'overhead di creare le coppie e decomprimerle essere più grande del costo dell'ulteriore attraversamento. – augustss
@augusts Non se l'attraversamento è su un enorme file! Non ho intenzione di applicare questo alle liste attuali. – tibbe