$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;