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]).