Pdb.group_res_go: def of bend-prot@0.1.0.0 Import: import bend-prot@0.1.0.0/pdb.bend as Pdb Lines 374-387 of bend-prot@0.1.0.0/pdb.bend: https://jend.leeeet.dev/read.txt?path=bend-prot@0.1.0.0/pdb.bend&start_line=374&end_line=387 import Base import bend-prot@0.1.0.0/protein.bend as P # Pass 1: consecutive equal (chain, seq) merge. Chains and residues run in # parallel Data lists: a pair accumulator would not be reusable (+ needs # Data), so the two stay aligned and are zipped after (zip_chains). # Branchless: both next-states are built as data and picked, with one # self-call on the tail, so no helper cycle is needed. def group_res_go(items: List<&1, U32 & Nat & P.Atom>, +cur_c: U32, +cur_s: Nat, +cur_as: List<&2, P.Atom>, +acc_c: List<&2, U32>, +acc_r: List<&2, P.Residue>) -> List<&2, U32> & List<&2, P.Residue>: match items: case Nil{}: (List.reverse(&2, U32, cur_c <> acc_c), List.reverse(&2, P.Residue, P.Residue{cur_s, List.reverse(&2, P.Atom, cur_as)} <> acc_r)) case (c, s, a) <> t: +c2 = c +s2 = s +same = Bool.and(U32.is_eq(c2, cur_c), Nat.is_eq(s2, cur_s)) group_res_go(t, Bool.pick(U32, same, cur_c, c2), Bool.pick(Nat, same, cur_s, s2), a <> Bool.pick(List<&2, P.Atom>, same, cur_as, Nil{}), Bool.pick(List<&2, U32>, same, acc_c, cur_c <> acc_c), Bool.pick(List<&2, P.Residue>, same, acc_r, P.Residue{cur_s, List.reverse(&2, P.Atom, cur_as)} <> acc_r)) Uses (12): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.and https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.pick https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.reverse https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.is_eq https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Sigma https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.is_eq https://jend.leeeet.dev/definition.txt?path=bend-prot@0.1.0.0/protein.bend&name=Atom https://jend.leeeet.dev/definition.txt?path=bend-prot@0.1.0.0/protein.bend&name=Residue