równoległe „Składanie” w Haskell
Mam funkcję z poniższym typem:
union :: a -> a -> a
Ia
maaddytywność własność. Więc możemy to uznaćunion
jako wersja(+)
Powiedzmy, że mamy[a]
i chcesz wykonać równoległe"folding"
, w przypadku składania nierównoległego możemy zrobić tylko:
foldl1' union [a]
Ale jak to zrobić równolegle? Mogę pokazać problemNum
wartości i(+)
funkcjonować.
Na przykład mamy listę[1,2,3,4,5,6]
i(+)
Równolegle powinniśmy się podzielić
[1,2,3] (+) [4,5,6]
[1,2] (+) [3] (+) [4,5] (+) [6]
([1] (+) [2]) (+) ([3] (+) [4]) (+) ([5] (+) [6])
potem każdy(+)
Operacja, którą chcemy wykonać równolegle i połączyć, aby odpowiedzieć
[3] (+) [7] (+) [11] = 21
Zauważ, że dzielimy listę lub wykonujemy operacje w dowolnej kolejności, z powodua
addytywność.
Czy można to zrobić za pomocą dowolnej standardowej biblioteki?