packages feed

language-ats-1.7.2.0: test/data/ifact2.out

fun ifact2 {n:nat} .<>. (n : int(n)) :<> [r:int] (FACT(n, r) | int(r)) =
  let
    fun loop { i : nat | i <= n }{r:int} .<n-i>. (pf : FACT(i, r)
                                                 | n : int(n), i : int(i), r : int(r)) :<>
      [r:int] (FACT(n, r) | int(r)) =
      if n - i > 0 then
        let
          val (pfmul | r1) = imul2((i + 1, r))
        in
          loop(FACTind(pf, pfmul) | n, i + 1, r1)
        end
      else
        (pf | r)
    
    // end of [if]
    // end of [loop]
  in
    loop(FACTbas() | n, 0, 1)
  end

// end of [ifact2]