		/* Sorting a List of Integers by Quicksort */

mode none.
closure none.

qsort([])           equals [].
qsort([Pivot|Rest]) equals glue(Pivot, partition(Rest,Pivot)).	

	glue(Pivot, pair(A, B)) equals append(qsort(A), [Pivot | qsort(B)]).

		append([],    X) equals X.
		append([H|T], Y) equals [H | append(T, Y)].

	partition([],    P) equals pair([],  []).
	partition([H|T], P) equals place(P, H, partition(T, P)).

		place(P, H, pair(A, B)) equals  if P>H then pair([H|A], B) 
						else pair(A, [H|B]).

