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 set (pair (r*n) (n-1)) end; fst get end in let n = fact 9 in write n