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)

Uses (8)

Used by (1)