Functions can be passed as parameters just like other values in ML.For example, consider these function definitions:
 
 fun sqaure a = a * a;
 
 fun double a = a + a;
 
 fun compute (n,f) = f n;
 
 The functions square and double take a single int parameter and return  an int result.The function compute takes a value n and a function f, and  returns the result of calling that function f with n as its  parameter.So, compute(3,square) evaluates to 9, and compute(3,double) to  6.
 
 * Make another version of quicksort function, but this time of type 'a  list * ('a * 'a -> bool) -> 'a list. The second parameter should  be a function that performs the role of the  
 Why would you want to define a function? because it is much more useful  than the origional one. For example, suppose you define icmp and rcmp  like this:
 
 fun icmp (a, b) = a < b;
 
 func rcmp ( a : real, b) = a < b;
 
 You should now use quick sort(L, icmp) to sort an integer list L, and  you could use quicksort(M, rcmp) to sort a real list M. and if you  defined: fun ircmp(a,b) = a > b;
 
 then you could use quicksort(L, ircmp) to sort the integer list L in reverse order.