fun even i = (i mod 2) = 0; fun odd i = not(even i); fun upto 0 = [] |upto n = (upto (n-1))@[n]; fun pairs e [] = [] |pairs e (h::t) = (e,h)::(pairs e t); fun cp [] y = [] |cp (e::x) y = (pairs e y)@(cp x y); (* Alternatively *) fun cp1 x y = collapse (mapf (map pairs x) y);