def osa_row
cli@0.2.0.0 · cli.bend:5692
import cli@0.2.0.0/cli.bend as Cli
import Base
5692
5693
5694def osa_row(bs: String, bp: Maybe<&2, Char>, +a: Char,
5695 +ap: Maybe<&2, Char>, +up: List<&2, Nat>, +up2: List<&2, Nat>,
5696 left: Nat) -> List<&2, Nat>:
5697 match bs:
5698 case SNil{}: Nil{}
5699 case SCon{+b, tail}:
5700 +diag = head_nat(up)
5701 +rest = tail_nats(up)
5702 +edit = Nat.min(Nat.min((head_nat(rest) + 1n : Nat), (left + 1n : Nat)),
5703 Bool.pick(Nat, Char.is_eq(a, b), diag, (diag + 1n : Nat)))
5704 +best = Bool.pick(Nat, Bool.and(same_char(bp, a), same_char(ap, b)),
5705 Nat.min(edit, (head_nat(up2) + 1n : Nat)), edit)
5706 best <> osa_row(tail, Some{b}, a, ap, rest, tail_nats(up2), best)