% Sort... coming
inOrder([_]).
inOrder([A, B | T]) :-
A =< B, inOrder([B | T]).
sorted(List, List) :- inOrder(List).
sorted(List, SortedList) :-
append(Start, [E1, E2 | Tail], List),
E1 > E2,
!,
append(Start, [E2, E1 | Tail], Partial),
sorted(Partial, SortedList).
split([], [], []).
split([A], [A], []).
split([A, B | T], [A | L1], [B | L2]) :-
split(T, L1, L2).
myMerge([],L,L).
myMerge(L,[],L).
myMerge([A|X],[B|Y],[A|Z]) :- A=B, myMerge([A|X], Y, Z).
mergeSort([],[]).
mergeSort([A],[A]) :- !.
mergeSort(List,Answer) :- split(List,L1,L2),mergeSort(L1,A1),mergeSort(L2,A2),
myMerge(A1,A2,Answer).