fun curry f x y = f(x,y);Other possible (equivalent) definitions are:
fun curry f = fn x => fn y => f(x,y); val curry = fn f => fn x => fn y => f(x,y);
fun filter p [] = []
| filter p (x::l) = (if p x then [x] else []) @ filter p l;
val length = let fun plus1(x,y) = 1 + y
in reduce plus1 0
end;
or, equivalently:
val length = reduce (fn(x,y) => 1 + y) 0;
val maximum_positive = let fun max(x,y) = if x>y then x else y
in reduce max 0
end;
or, equivalently:
val maximum_positive = reduce (fn(x,y) => if x>y then x else y) 0;
val reverse = let fun insert_at_end (x,l) = l @ [x]
in reduce insert_at_end []
end;
or, equivalently:
val reverse = reduce (fn(x,l) => l @ [x]) false;
fun occurs x = let fun found (y,b) = b orelse x=y
in reduce found false
end;
or, equivalently:
fun occurs x = reduce (fn(y,b) => b orelse x=y) false;
val f = fn x => fn y => (x,y);or equivalently:
fun f x y = (x,y);
val g = fn u => fn x => u(x,x);or equivalently:
fun g u x = u(x,x);
val h = fn u => fn l => [u(hd l)];or equivalently:
fun h u l = [u(hd l)];