Util.filter_halves.go: def of unified-nsga-iii@0.2.2.0 Import: import unified-nsga-iii@0.2.2.0/util.bend as Util Lines 305-328 of unified-nsga-iii@0.2.2.0/util.bend: https://jend.leeeet.dev/read.txt?path=unified-nsga-iii@0.2.2.0/util.bend&start_line=305&end_line=328 import Base # Independent keep/drop. Mid-split; `take ++ drop` matches the old # tail-first cons_if walk (original relative order). def filter_halves.go( ~A: Data, ~C: Data, ~p: @+c:C -> @+x:A -> Bool, +ctx: C, +fuel: Nat, xs: List<&2, A> ) -> List<&2, A>: match fuel xs: case 0n Nil{}: Nil{} case 0n +h <> t: keep_if(A, h, filter_halves.go(~A, ~C, ~p, ctx, 0n, t), p(ctx, h)) case 1n+p0 Nil{}: Nil{} case 1n+p0 +h <> Nil{}: keep_if(A, h, Nil{}, p(ctx, h)) case 1n+p0 h <> t: +all = {h <> t : List<&2, A>} +mid = Nat.div(list_len(A, all), 2n) a b = filter_halves.go(~A, ~C, ~p, ctx, p0, List.take(&2, A, all, mid)) filter_halves.go(~A, ~C, ~p, ctx, p0, List.drop(&2, A, all, mid)) List.append(&2, A, a, b) Uses (9): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.append https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.drop https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.take https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.div https://jend.leeeet.dev/definition.txt?path=unified-nsga-iii@0.2.2.0/util.bend&name=keep_if https://jend.leeeet.dev/definition.txt?path=unified-nsga-iii@0.2.2.0/util.bend&name=list_len