Insertion Sort
% The relation ordered_insert(X, IntoThis, GetThis) is satisfied when % GetThis is equal to IntoThis with X added immediately before the first % item which is greater than or equal to X. ordered_insert(X, [], [X]). ordered_insert(X, [Y|T], [X,Y|T]) :- X =< Y. ordered_insert(X, [Y|T], [Y|Z]) :- X > Y, ordered_insert(X, T, Z). % Perform sorting by insertion sort. sorted([], []). sorted([X|Y], Z) :- sorted(Y, SY), ordered_insert(X, SY, Z).