def perm_go

bend-collections-laws-math@1.0.0.0 · src/math/generic.bend:459

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

459# n (n - 1) ... (n - k + 1): m runs down while k counts the factors left
460def perm_go(~T: Data, ~op: N.Op<T> -> T, ~test: N.Test<T> -> Bool, fuel: Nat, +k: T, +m: T, st: T & Bool, more: Bool) -> Maybe<&2, T>:
461  match fuel st more:
462    case 0n _ _:
463      None{}
464    case 1n+f Tuple{a, False{}} _:
465      None{}
466    case 1n+f Tuple{+a, True{}} False{}:
467      Some{a}
468    case 1n+f Tuple{+a, True{}} True{}:
469      perm_go(~T, ~op, ~test, f, dec(~T, ~op, k), dec(~T, ~op, m), mul_by(~T, ~op, ~test, m, (a, True{})), Bool.not(test(N.IsZero{dec(~T, ~op, k)})))

Uses (10)

Used by (5)