def count_raw.go
unified-nsga-iii@0.2.2.0 · survival.bend:300
import unified-nsga-iii@0.2.2.0/survival.bend as Survival
import Base
import unified-nsga-iii@0.2.2.0/util.bend as Util
300
301def count_raw.go(+n: Nat, +fuel: Nat, asgs: List<&2, Assignment>) -> List<&2, Nat>:
302 match fuel asgs:
303 case 0n Nil{}:
304 Util.zeros_nat(n)
305 case 0n a <> rest:
306 Util.inc_at(count_raw.go(n, 0n, rest), asg_ref(a))
307 case 1n+p Nil{}:
308 Util.zeros_nat(n)
309 case 1n+p a <> Nil{}:
310 Util.inc_at(Util.zeros_nat(n), asg_ref(a))
311 case 1n+p h <> t:
312 +all = {h <> t : List<&2, Assignment>}
313 +mid = Nat.div(Util.list_len(Assignment, all), 2n)
314 lo hi = count_raw.go(n, p, List.take(&2, Assignment, all, mid)) count_raw.go(n, p, List.drop(&2, Assignment, all, mid))
315 Util.nats_add(lo, hi)