46 lines
		
	
	
		
			671 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			671 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(quick(_Order)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										authors is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2000/4/22,
							 | 
						||
| 
								 | 
							
										parnames is ['Order'],
							 | 
						||
| 
								 | 
							
										comment is '.',
							 | 
						||
| 
								 | 
							
										source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(sort/2).
							 | 
						||
| 
								 | 
							
									:- mode(sort(+list, -list), one).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									sort([], []).
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									sort([X| L], S):-
							 | 
						||
| 
								 | 
							
										split(L, X, L1, L2),
							 | 
						||
| 
								 | 
							
										sort(L1, S1),
							 | 
						||
| 
								 | 
							
										sort(L2, S2),
							 | 
						||
| 
								 | 
							
										app(S1, [X| S2], S).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									split([], _, [], []).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									split([D| L], X, [D| L1], L2):-
							 | 
						||
| 
								 | 
							
										parameter(1, Order),
							 | 
						||
| 
								 | 
							
										Order::less(D, X),
							 | 
						||
| 
								 | 
							
										!,
							 | 
						||
| 
								 | 
							
										split(L, X, L1, L2).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									split([D| L], X, L1, [D| L2]):-
							 | 
						||
| 
								 | 
							
										split(L, X, L1, L2).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									app([], L, L).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									app([H| T], L, [H| T2]) :-
							 | 
						||
| 
								 | 
							
										app(T, L, T2).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |