39 lines
		
	
	
		
			578 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			578 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  | :- object(abstract_class, | ||
|  | 	instantiates(class), | ||
|  | 	specializes(object)). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- info([ | ||
|  | 		authors is 'Paulo Moura', | ||
|  | 		version is 1.0, | ||
|  | 		date is 2000/4/22, | ||
|  | 		comment is 'Default metaclass for all abstract classes.']). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(metaclass/0). | ||
|  | 	:- mode(metaclass, zero_or_one). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(abstract_class/0). | ||
|  | 	:- mode(abstract_class, zero_or_one). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	abstract_class :- | ||
|  | 		self(Self), | ||
|  | 		Self \= abstract_class. | ||
|  | 
 | ||
|  | 
 | ||
|  | 	metaclass :- | ||
|  | 		self(Self), | ||
|  | 		once(( | ||
|  | 			instantiates_class(Class, Self), | ||
|  | 			Class::current_predicate(abstract_class/0))). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	strict_instance :- | ||
|  | 		fail. | ||
|  | 
 | ||
|  | 
 | ||
|  | :- end_object. |