我们可以融合在列表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