Selection Sort in Prolog

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Selection Sort in Prolog %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Nicolaie Popescu-Bodorin, 2009 % http://fmi.spiruharet.ro/bodorin/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Prolog, TP 2.0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DOMAINS r=real lr=r* PREDICATES selection_sort(lr,lr) min(lr,r) min(lr,r,r) elim1(r,lr,lr) CLAUSES % Selection sort by searching for min % USAGE: selection_sort([],[]):-!. selection_sort(L,[H|T]):- min(L,H), elim1(H,L,LR), selection_sort(LR,T). % min(InputList, Minimum), (i,o) min([H|T],M):-min(T,H,M). min([H|T],Ri,R):- H>=Ri,!,min(T,Ri,R); H<Ri,!,min(T,H,R). min([],R,R). % elim1(Given Element, GivenList, ResultingList) , (i,i,o) % Eliminate the first occurence of the given element from the given list elim1(H,[H|T],T):-!. elim1(E,[H|T],[H|TR]):-elim1(E,T,TR).