40 lines
		
	
	
		
			924 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			924 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Points are going to be the fundamental quantity.                     */
							 | 
						||
| 
								 | 
							
								/* These will be defined in Cartesian co-ordinates.                     */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(point(_X, _Y)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										authors is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2000/4/22,
							 | 
						||
| 
								 | 
							
										comment is 'Parametric object for representing geometric points.',
							 | 
						||
| 
								 | 
							
										parnames is ['X', 'Y'],
							 | 
						||
| 
								 | 
							
										source is 'Example adopted from the POEM system by Ben Staveley-Taylor.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(identical/1).
							 | 
						||
| 
								 | 
							
									:- mode(identical(+nonvar), one).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(distance/2).
							 | 
						||
| 
								 | 
							
									:- mode(distance(+nonvar, -number), one).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									identical(point(X1, Y1)) :-
							 | 
						||
| 
								 | 
							
										/* succeeds if the argument and owner points are the same.  */
							 | 
						||
| 
								 | 
							
										parameter(1, X),
							 | 
						||
| 
								 | 
							
										parameter(2, Y),
							 | 
						||
| 
								 | 
							
										X1 = X,
							 | 
						||
| 
								 | 
							
										Y1 = Y.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									distance(point(X1, Y1), Distance) :-
							 | 
						||
| 
								 | 
							
										/* finds the distance between argument and owner points.    */
							 | 
						||
| 
								 | 
							
										parameter(1, X),
							 | 
						||
| 
								 | 
							
										parameter(2, Y),
							 | 
						||
| 
								 | 
							
										Distance is sqrt((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |