以下のタイプの関数があります。
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
加法性のために、リストを分割したり、任意の順序で操作を実行したりすることに注意してください。
標準ライブラリを使用してそれを行う方法はありますか?