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