fun factorial n = if n=0 then 1 else n*factorial(n-1); fun length nil = 0 | length (a::b) = 1+length b; fun append nil b = b | append (h::t) b = h::(append t b); fun rev nil = nil | rev (a::b) = let fun rev2 nil b = b | rev2 (h::t) b = rev2 t (h::b) in rev2 b [a] end; fun map f nil = nil | map f (h::t) = (f h)::(map f t); fun reduce f zero nil = zero | reduce f zero (h::t) = f h (reduce f zero t); fun to n = let fun up m = if m>n then nil else m::(up(m+1)) in up 1 end; reduce (fn a:int=>fn b=>a+b) 0 (to 10); rev (map factorial (to 4));