def par_reduce.list.go
bend-kit-concurrency@0.2.0.0 · concurrency.bend:82
import bend-kit-concurrency@0.2.0.0/concurrency.bend as Concurrency
import Base
82def par_reduce.list.go(
83 ~A: Data, ~f: A -> A -> A, d: Nat, +nl: Nat, +nr: Nat, +z: A, lr: List<A> & List<A>
84) -> A:
85 match d:
86 case 0n:
87 (l, r) = lr
88 lo hi = fold(~A, ~f, l, z) fold(~A, ~f, r, z)
89 f(lo, hi)
90 case 1n+ +p:
91 (l, r) = lr
92 +hl = Nat.div(nl, 2n)
93 +hr = Nat.div(nr, 2n)
94 ls = split(A, l, hl)
95 rs = split(A, r, hr)
96 lo hi = par_reduce.list.go(~A, ~f, p, hl, Nat.sub(nl, hl), z, ls) par_reduce.list.go(~A, ~f, p, hr, Nat.sub(nr, hr), z, rs)
97 f(lo, hi)