我們可以融合在列表xs
兩次遍歷表達式如何在同一個列表中融合兩張地圖?
(map f xs, map g xs)
像這樣
unzip (map (\x -> (f x, g x)) xs)
是否有自動執行這種融合的任何reasearch?
(有一個風險在這裏創造一個空間泄漏如果返回的列表中的一個在另一個之前消耗掉,我更感興趣的是防止額外的穿越過xs
比節省空間。)
編輯:實際上並不想將融合應用到實際的內存中的Haskell列表中,這種轉換可能沒有意義,取決於unzip
是否可以與其消費者融合。我有一個設置,我知道unzip
可以融合(請參閱「FlumeJava:簡單,高效的數據並行管道」)。
不是自動的,但相當不錯:無論如何:http://squing.blogspot.com/2008/11/beautiful-folding.html –
除非這個結果與別的東西融合,否則創建對和解壓縮它們的開銷將會大於額外遍歷的成本。 – augustss
@augustss如果遍歷超過一個巨大的文件,則不會!我不打算將此應用於實際列表。 – tibbe