11

以下のタイプの関数があります。

union :: a -> a -> a

そして加法性aを持っています。したがって、のバージョンと見なすことができますunion(+)

を持っていて[a]、 parallel を実行したいとします。"folding"非平行な折り畳みでは、次のことしかできません。

foldl1' union [a]

しかし、それを並行して実行する方法は? Num値と(+)機能の問題を示すことができます。

たとえば、リストが[1,2,3,4,5,6]あり、(+) 並行して分割する必要があります

[1,2,3] (+) [4,5,6]
[1,2] (+) [3] (+) [4,5] (+) [6]
([1] (+) [2]) (+) ([3] (+) [4]) (+) ([5] (+) [6])

(+)次に、並行して実行したい各操作を組み合わせて答えます

[3] (+) [7] (+) [11] = 21

a加法性のために、リストを分割したり、任意の順序で操作を実行したりすることに注意してください。

標準ライブラリを使用してそれを行う方法はありますか?

4

3 に答える 3