git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1487 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			154 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| :- object(quick(_Order)).
 | |
| 
 | |
| 	:- info([
 | |
| 		author 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.
 | |
| 
 | |
| 
 | |
| 
 | |
| :- object(descend).
 | |
| 
 | |
| 	:- info([
 | |
| 		author is 'Paulo Moura',
 | |
| 		version is 1.0,
 | |
| 		date is 2000/4/22,
 | |
| 		comment is '.',
 | |
| 		source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
 | |
| 
 | |
| 	:- public(less/2).
 | |
| 
 | |
| 	less(X, Y):-
 | |
| 		X >= Y.
 | |
| 
 | |
| :- end_object.
 | |
| 
 | |
| 
 | |
| :- object(natural).
 | |
| 
 | |
| 	:- info([
 | |
| 		author is 'Paulo Moura',
 | |
| 		version is 1.0,
 | |
| 		date is 2000/4/22,
 | |
| 		comment is '.',
 | |
| 		source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
 | |
| 
 | |
| 	:- public(less/2).
 | |
| 
 | |
| 	less(X, Y):-
 | |
| 		X < Y.
 | |
| 
 | |
| :- end_object.
 | |
| 
 | |
| 
 | |
| :- object(geographic(_OX, _OY)).
 | |
| 
 | |
| 	:- info([
 | |
| 		author is 'Paulo Moura',
 | |
| 		version is 1.0,
 | |
| 		date is 2000/4/22,
 | |
| 		parnames is ['OX', 'OY'],
 | |
| 		comment is '.',
 | |
| 		source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
 | |
| 
 | |
| 	:- public(less/2).
 | |
| 
 | |
| 	less(Town1, Town2):-
 | |
| 		angle(Town1, Angle1),
 | |
| 		angle(Town2, Angle2),
 | |
| 		Angle1 < Angle2.
 | |
| 
 | |
|     angle(Town, Angle) :-
 | |
| 		Town::at(X, Y),
 | |
| 		parameter(1, OX),
 | |
| 		parameter(2, OY),
 | |
|     	angle(X, Y, OX, OY, Angle).
 | |
| 
 | |
|     angle(X, Y, OX, OY, Angle) :-
 | |
| 		X > OX,
 | |
| 		Y >= OY,
 | |
| 		Angle is atan((Y-OY)/(X-OX)).
 | |
| 
 | |
|     angle(X, Y, OX, OY, Angle) :-
 | |
| 		X > OX,
 | |
| 		Y < OY,
 | |
| 		pi(Pi),
 | |
| 		Angle is Pi + Pi - atan((OY-Y)/(X-OX)).
 | |
| 
 | |
|     angle(X, Y, OX, OY, Angle) :-
 | |
| 		X < OX,
 | |
| 		Y >= OY,
 | |
| 		pi(Pi),
 | |
| 		Angle is Pi - atan((Y-OY)/(OX-X)).
 | |
| 
 | |
|     angle(X, Y, OX, OY, Angle) :-
 | |
| 		X < OX,
 | |
| 		Y < OY,
 | |
| 		pi(Pi),
 | |
| 		Angle is Pi + atan((OY-Y)/(OX-X)).
 | |
| 
 | |
|     angle(OX, Y, OX, OY, Angle) :- 
 | |
| 		Y > OY,
 | |
|     	pi(Pi),
 | |
|     	Angle is Pi / 2.
 | |
| 
 | |
|     angle(OX, Y, OX, OY, Angle) :-
 | |
| 		Y =< OY,
 | |
|     	pi(Pi),
 | |
|     	Angle is 1.5 * Pi.
 | |
| 
 | |
| 	pi(Pi) :-
 | |
| 		Pi is 4.0*atan(1.0).
 | |
| 
 | |
| :- end_object.
 | |
| 
 | |
| 
 | |
| :- object(metric(_Town)).
 | |
| 
 | |
| 	:- info([
 | |
| 		author is 'Paulo Moura',
 | |
| 		version is 1.0,
 | |
| 		date is 2000/4/22,
 | |
| 		comment is '.',
 | |
| 		parnames is ['Town'],
 | |
| 		source is 'Example adopted from the Francis G. McCabe L&O documentation.']).
 | |
| 
 | |
| 	:- public(less/2).
 | |
| 
 | |
| 	less((Town1, _), (Town2, _)):-
 | |
| 		parameter(1, Town),
 | |
| 		Town::crow_flies(Town1, Distance1),
 | |
| 		Town::crow_flies(Town2, Distance2),
 | |
| 		Distance1 < Distance2.		
 | |
| 
 | |
| :- end_object.
 |