
fun f x = x+1;

fun map f [] = [] | map f (x::xs) = (f x)::(map f xs);

val ff = map f;

ff [1,0,2];

fun map2 f = let fun ff [] = [] | ff (x::xs) = (f x)::(ff xs)
in ff end;

val ff2 = map2 f;   

ff2 [2,1,3];
 

fun map f [] = [] | map f (x::xs) = (f x)::(map f xs);

fun double x = 2*x;

val listdouble = map double;

listdouble [1,4,2,5,3,4,2,3,9];



datatype btree=NULL |NODE of int*btree*btree;

val v1 = NODE (3, NODE (4, NULL,NULL),NULL);

fun sumnodes NULL = 0 | sumnodes (NODE (x,y,z)) = x+sumnodes(y)+sumnodes(z);

sumnodes v1;

val v2 = NODE (6,NULL, v1);

sumnodes(v2);

fun inorder NULL = [] |
    inorder (NODE(x,y,z)) = inorder(y)@[x]@inorder(z);

fun max NULL = 0 | max (NODE(x,y,z)) = 
  let val my = max(y) and mz = max(z) in
    if (my > mz) then if (my > x) then my else x else
    if (mz > x) then mz else x
  end;

fun reverse([]) = [] | reverse(x::xs) = (reverse(xs)@[x]);
