mergeSort([], []).
mergeSort(H.[], H.[]).
mergeSort(F.S.T, Sall) :- split(F.S.T, Left, Right),
			         mergeSort(Left, Sleft),
				   mergeSort(Right, Sright),
				   merge(Sleft, Sright, Sall).
split([], [], []).
split(H.[], H.[], []).
split(F.S.T, F.U, S.V) :- split(T, U, V).
merge([], L, L).
merge(L, [], L).
merge(F.B, H.T, F.U) :- F=<H, merge(B, H.T, U).
merge(F.B, H.T, H.V) :- H<F, merge(F.B, T, V).