xs
式のリストで 2 つのトラバーサルを融合できます。
(map f xs, map g xs)
そのようです
unzip (map (\x -> (f x, g x)) xs)
この種の融合を自動的に実行することに関する研究はありますか?
(返されたリストの 1 つが他のリストの前に消費されると、ここでスペース リークが発生するリスクがあります。スペースを節約するよりも、余分なトラバーサルを防ぐことに関心がありますxs
。)
unzip
編集:実際には、融合を実際のメモリ内 Haskell リストに適用するつもりはありません。この変換は、消費者と融合できるかどうかによっては意味をなさない可能性があります。融合できることがわかっている設定がありますunzip
(「FlumeJava: 簡単で効率的なデータ並列パイプライン」を参照)。