我々は自動的融合のこの種の実行上の任意のreasearchがありますので、同じリストで2つのマップを融合するにはどうしたらいいですか?
unzip (map (\x -> (f x, g x)) xs)
のように表現
(map f xs, map g xs)
にリストxs
にわたって2つの横断を融合だろうか?
(返されたリストの一方が他方の前に消費された場合は、ここでスペースリークを作成するにはリスクがあります、私はスペースを節約するよりもxs
の上に余分な横断を防止する上でより興味があります。。)
編集:I unzip
がその消費者と融合できるかどうかによっては、この変換が意味をなさないかもしれない実際のメモリ内Haskellリストに融合を適用することを実際には考えていない。私はunzip
が融合できることを知っている設定をしています(「FlumeJava:簡単で効率的なデータ並列パイプライン」を参照)。
とにかく、自動ではありませんが、かなりいいです:http://squing.blogspot.com/2008/11/beautiful-folding.html –
この結果が他のものと融合しない限り、ペアを作成してそれらを解凍するオーバーヘッドは、余分なトラバースのコストよりも大きくなる。 – augustss
@augustssトラバーサルが巨大なファイルを上回っていない場合は!私はこれを実際のリストに適用するつもりはない。 – tibbe