$use StdIO; $func Fact e.N = t.F; Main = // >; : e; Fact e.N = e.N () $iter { e.N : e.N-1 t, e.N-1 t.Fact $iter { e.M : e.M-1 t, t.Mul t.Fact $iter { e.Mul : (e.Mul-1), e.Mul-1 (t.Fact); } :: e.Mul t.Fact, e.Mul : /*empty*/ = e.M-1 t.Fact; } :: e.M t.Mul, e.M : /*empty*/ = e.N-1 t.Mul; } :: e.N t.Fact, e.N : /*empty*/ = t.Fact;