Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Functions can be passed as parameters just like other values in ML.For example,

ID: 3542965 • Letter: F

Question

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 <comparision in your origional function.

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.

Explanation / Answer

let rec qsort lo hi (a : int array) = if lo