fun I x = x; fun K x y = x; fun S x y z = x z (y z); fun gen f [] = I |gen f (n::m) = (f n) o (gen f m); fun mapf [] x = x |mapf (f::fs) x = mapf fs (f x);