let fact = fn n -> begin set (pair 1 n); while snd get > 0 do begin let r = fst get in let n = snd get in begin if n==10 then break else if n==3 then begin set (pair r (n-1)); continue end else 1; set (pair (r*n) (n-1)) end end; fst get end in fact 20