Insertion Sort in Prolog

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Insertion Sort in Prolog %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Nicolaie Popescu-Bodorin, 2009 % http://fmi.spiruharet.ro/bodorin/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Prolog, TP 2.0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DOMAINS r=real lr=r* PREDICATES insertion_sort(lr,lr) insertion_sort(lr,lr,lr) insert(r,lr,lr) insert2(r,lr,lr) CLAUSES insertion_sort([X],[X]):-!. insertion_sort(L,R):-insertion_sort(L,[],R). insertion_sort([H|T],Ri,R):- !, %insert(H,Ri,Ria), insert2(H,Ri,Ria), insertion_sort(T,Ria,R). insertion_sort([],Ri,Ri). insert(P,[],[P]):-!. insert(P,[H|T],[P,H|T]):-P<=H,!. insert(P,[H|T],[H|TR]):-P>H,insert(P,T,TR). % second implementation for insert: insert2(X,[H|T],[H|TR]):-X>H,!,insert(X,T,TR). insert2(X,L,[X|L]).