118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(shape).	% an object with no hierarchy relations with other 
							 | 
						||
| 
								 | 
							
													% objects is always compiled as a prototype
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										author is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2003/2/3,
							 | 
						||
| 
								 | 
							
										comment is 'Generic geometric shape.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(color/1).
							 | 
						||
| 
								 | 
							
									:- mode(color(?atom), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(color/1, [
							 | 
						||
| 
								 | 
							
										comment is 'Shape color.',
							 | 
						||
| 
								 | 
							
										argnames is ['Color']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(position/2).
							 | 
						||
| 
								 | 
							
									:- mode(position(?integer, ?integer), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(position/2, [
							 | 
						||
| 
								 | 
							
										comment is 'Shape position.',
							 | 
						||
| 
								 | 
							
										argnames is ['X', 'Y']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									color(red).      % default shape color
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									position(0, 0).  % default shape position
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(polygon,
							 | 
						||
| 
								 | 
							
								    extends(shape)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										author is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.1,
							 | 
						||
| 
								 | 
							
										date is 2004/1/8,
							 | 
						||
| 
								 | 
							
										comment is 'Generic polygon.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(nsides/1).
							 | 
						||
| 
								 | 
							
									:- mode(nsides(?integer), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(nsides/1, [
							 | 
						||
| 
								 | 
							
										comment is 'Polygon number of sides.',
							 | 
						||
| 
								 | 
							
										argnames is ['Number']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(area/1).
							 | 
						||
| 
								 | 
							
									:- mode(area(-float), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(area/1, [
							 | 
						||
| 
								 | 
							
										comment is 'Polygon area.',
							 | 
						||
| 
								 | 
							
										argnames is ['Area']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(perimeter/1).
							 | 
						||
| 
								 | 
							
									:- mode(perimeter(?atom), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(perimeter/1, [
							 | 
						||
| 
								 | 
							
										comment is 'Polygon perimeter.',
							 | 
						||
| 
								 | 
							
										argnames is ['Perimeter']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(regular_polygon,
							 | 
						||
| 
								 | 
							
								    extends(polygon)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										author is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.1,
							 | 
						||
| 
								 | 
							
										date is 2004/1/8,
							 | 
						||
| 
								 | 
							
										comment is 'Generic regular polygon.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- public(side/1).
							 | 
						||
| 
								 | 
							
									:- mode(side(?atom), zero_or_one).
							 | 
						||
| 
								 | 
							
									:- info(side/1, [
							 | 
						||
| 
								 | 
							
										comment is 'Regular polygon side length.',
							 | 
						||
| 
								 | 
							
										argnames is ['Length']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									side(1).         % default side length
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									perimeter(Perimeter) :-
							 | 
						||
| 
								 | 
							
										::nsides(Number),
							 | 
						||
| 
								 | 
							
										::side(Side),
							 | 
						||
| 
								 | 
							
										Perimeter is Number*Side.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(square,
							 | 
						||
| 
								 | 
							
								    extends(regular_polygon)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										author is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										date is 2003/2/3,
							 | 
						||
| 
								 | 
							
										comment is 'Geometric square.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									nsides(4).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									area(Area) :-
							 | 
						||
| 
								 | 
							
										::side(Side),
							 | 
						||
| 
								 | 
							
										Area is Side*Side.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(q1,
							 | 
						||
| 
								 | 
							
								    extends(square)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- object(q2,
							 | 
						||
| 
								 | 
							
								    extends(square)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									position(2, 3).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									color(blue).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									side(3).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_object.
							 |