def comb_go
bend-collections-laws-math@1.0.0.0 · src/math/generic.bend:490
import bend-collections-laws-math@1.0.0.0/src/math/generic.bend as Generic
import Base
import bend-collections-laws-math@1.0.0.0/src/math/num.bend as N
490
491def comb_go(~T: Data, ~op: N.Op<T> -> T, ~test: N.Test<T> -> Bool, fuel: Nat, +n: T, +i: T, +k: T, st: T & Bool, more: Bool) -> Maybe<&2, T>:
492 match fuel st more:
493 case 0n _ _:
494 None{}
495 case 1n+f Tuple{r, False{}} _:
496 None{}
497 case 1n+f Tuple{+r, True{}} False{}:
498 Some{r}
499 case 1n+f Tuple{+r, True{}} True{}:
500 comb_go(~T, ~op, ~test, f, n, inc(~T, ~op, i), k, comb_next(~T, ~op, ~test, r, op(N.Sub{n, i}), inc(~T, ~op, i)), test(N.Lt{inc(~T, ~op, i), k}))