
:- seqex([append/3, partition/4]). 

partition(F,[],[],[]).
partition(F,[X|Y],[X|Y1],Y2) :- X =< F,
	partition(F,Y,Y1,Y2).
partition(F,[X|Y],Y1,[X|Y2]) :- X > F,
	partition(F,Y,Y1,Y2).

append([],L,L).
append([X|Y],L,[X|Z]) :- append(Y,L,Z).

quicksort([],[]).
quicksort([First|L1],L2) :-
	partition(First,L1,Ls,Lg), 
	(quicksort(Ls,Ls2) // quicksort(Lg,Lg2) ),
	append(Ls2,[First|Lg2],L2).

?- quicksort([40,99,91,93,90,3,1,2,4,10], L). 

/* ?- partition(10, [1,2,3,4,5,11,12,13,14,15], Ls, [11,12,13,14,15]). */

/* ?- append([1,2,3,4,5], [11,12,13,14,15], X). */

