fun fact n = if n = 0 then 1 else n*fact(n-1); fun fact' 0 = 1 (* pattern matching, "by cases" *) | fact' n = n*fact'(n-1); val rec fact'' = (* as a val declaration *) fn n => if n = 0 then 1 (* note "rec" because fact'' is *) else n*fact''(n-1); (* three factorial functions; CSSE, Monash U., 7/2005 *)