git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1580 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			215 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
:- category(class_hierarchy,
 | 
						|
	implements(class_hierarchyp)).
 | 
						|
 | 
						|
 | 
						|
	:- info([
 | 
						|
		version is 1.1,
 | 
						|
		author is 'Paulo Moura',
 | 
						|
		date is 2006/2/20,
 | 
						|
		comment is 'Class hierarchy predicates.']).
 | 
						|
 | 
						|
 | 
						|
	class(Class) :-
 | 
						|
		self(Self),
 | 
						|
		instantiates_class(Self, Class).
 | 
						|
 | 
						|
 | 
						|
	classes(Classes) :-
 | 
						|
		self(Self),
 | 
						|
		findall(Class, instantiates_class(Self, Class), Classes).
 | 
						|
 | 
						|
 | 
						|
	ancestor(Ancestor) :-
 | 
						|
		self(Self),
 | 
						|
		ancestor(Self, Ancestor).
 | 
						|
 | 
						|
 | 
						|
	ancestor(Self, Ancestor) :-
 | 
						|
		instantiates_class(Self, Ancestor).
 | 
						|
 | 
						|
	ancestor(Self, Ancestor) :-
 | 
						|
		instantiates_class(Self, Class),
 | 
						|
		superclass(Class, Ancestor).
 | 
						|
  
 | 
						|
 | 
						|
	ancestors(Ancestors) :-
 | 
						|
		self(Self),
 | 
						|
		findall(Ancestor, ancestor(Self, Ancestor), Ancestors).
 | 
						|
 | 
						|
 | 
						|
	instance(Instance) :-
 | 
						|
		self(Self),
 | 
						|
		instantiates_class(Instance, Self).
 | 
						|
 | 
						|
 | 
						|
	instances(Instances) :-
 | 
						|
		self(Self),
 | 
						|
		findall(Instance, instantiates_class(Instance, Self), Instances).
 | 
						|
 | 
						|
 | 
						|
	subclass(Subclass) :-
 | 
						|
		self(Self),
 | 
						|
		specializes_class(Subclass, Self).
 | 
						|
 | 
						|
 | 
						|
	subclasses(Subclasses) :-
 | 
						|
		self(Self),
 | 
						|
		findall(Subclass, specializes_class(Subclass, Self), Subclasses).
 | 
						|
 | 
						|
 | 
						|
	superclass(Superclass) :-
 | 
						|
		self(Self),
 | 
						|
		superclass(Self, Superclass).
 | 
						|
 | 
						|
	superclass(Self, Superclass) :-
 | 
						|
		specializes_class(Self, Superclass).
 | 
						|
 | 
						|
	superclass(Self, Superclass) :-
 | 
						|
		specializes_class(Self, Class),
 | 
						|
		superclass(Class, Superclass).
 | 
						|
 | 
						|
	superclasses(Superclasses) :-
 | 
						|
		self(Self),
 | 
						|
		findall(Superclass, specializes_class(Self, Superclass), Superclasses).
 | 
						|
 | 
						|
 | 
						|
	leaf(Leaf) :-
 | 
						|
		self(Self),
 | 
						|
		leaf(Self, Leaf).
 | 
						|
 | 
						|
 | 
						|
	leaf(Self, Leaf) :-
 | 
						|
		instantiates_class(Leaf, Self),
 | 
						|
		\+ instantiates_class(_, Leaf),
 | 
						|
		\+ specializes_class(_, Leaf).
 | 
						|
 | 
						|
	leaf(Self, Leaf) :-
 | 
						|
		specializes_class(Leaf, Self),
 | 
						|
		\+ instantiates_class(_, Leaf),
 | 
						|
		\+ specializes_class(_, Leaf).
 | 
						|
 | 
						|
	leaf(Self, Leaf) :-
 | 
						|
		specializes_class(Subclass, Self),
 | 
						|
		leaf(Subclass, Leaf).
 | 
						|
 | 
						|
 | 
						|
	leaves(Leaves) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Leaf, leaf(Self, Leaf), Leaves) ->
 | 
						|
			true
 | 
						|
		;	Leaves = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
	leaf_instance(Leaf) :-
 | 
						|
		self(Self),
 | 
						|
  		leaf_instance(Self, Leaf).
 | 
						|
 | 
						|
 | 
						|
  	leaf_instance(Self, Leaf) :-
 | 
						|
  		instantiates_class(Leaf, Self),
 | 
						|
  		\+ instantiates_class(_, Leaf).
 | 
						|
 | 
						|
  	leaf_instance(Self, Leaf) :-
 | 
						|
  		specializes_class(Subclass, Self),
 | 
						|
		leaf_instance(Subclass, Leaf).
 | 
						|
 | 
						|
 | 
						|
	leaf_instances(Leaves) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Leaf, leaf_instance(Self, Leaf), Leaves) ->
 | 
						|
			true
 | 
						|
		;	Leaves = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
	leaf_class(Leaf) :-
 | 
						|
		self(Self),
 | 
						|
  		leaf_class(Self, Leaf).
 | 
						|
  		
 | 
						|
  	leaf_class(Self, Leaf) :-
 | 
						|
  		specializes_class(Leaf, Self),
 | 
						|
  		\+ specializes_class(_, Leaf).
 | 
						|
 | 
						|
  	leaf_class(Self, Leaf) :-
 | 
						|
  		specializes_class(Subclass, Self),
 | 
						|
		leaf_class(Subclass, Leaf).
 | 
						|
 | 
						|
	leaf_classes(Leaves) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Leaf, leaf_class(Self, Leaf), Leaves) ->
 | 
						|
			true
 | 
						|
		;	Leaves = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
	descendant(Descendant) :-
 | 
						|
		self(Self),
 | 
						|
		descendant(Self, Descendant).
 | 
						|
 | 
						|
 | 
						|
	descendant(Self, Descendant) :-
 | 
						|
		instantiates_class(Descendant, Self).
 | 
						|
 | 
						|
	descendant(Self, Descendant) :-
 | 
						|
		specializes_class(Descendant, Self),
 | 
						|
		\+ instantiates_class(Descendant, Self).
 | 
						|
 | 
						|
	descendant(Self, Descendant) :-
 | 
						|
		specializes_class(Subclass, Self),
 | 
						|
		descendant(Subclass, Descendant).
 | 
						|
 | 
						|
 | 
						|
	descendants(Descendants) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Descendant, descendant(Self, Descendant), Descendants) ->
 | 
						|
			true
 | 
						|
		;	Descendants = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
	descendant_class(Descendant) :-
 | 
						|
		self(Self),
 | 
						|
		descendant_class(Self, Descendant).
 | 
						|
		
 | 
						|
 | 
						|
	descendant_class(Self, Descendant) :-
 | 
						|
		specializes_class(Descendant, Self).
 | 
						|
 | 
						|
	descendant_class(Self, Descendant) :-
 | 
						|
		specializes_class(Subclass, Self),
 | 
						|
		descendant_class(Subclass, Descendant).
 | 
						|
 | 
						|
 | 
						|
	descendant_classes(Descendants) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Descendant, descendant_class(Self, Descendant), Descendants) ->
 | 
						|
			true
 | 
						|
		;	Descendants = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
	descendant_instance(Descendant) :-
 | 
						|
		self(Self),
 | 
						|
		descendant_instance(Self, Descendant).
 | 
						|
		
 | 
						|
 | 
						|
	descendant_instance(Self, Descendant) :-
 | 
						|
		instantiates_class(Descendant, Self).
 | 
						|
 | 
						|
	descendant_instance(Self, Descendant) :-
 | 
						|
		specializes_class(Subclass, Self),
 | 
						|
		descendant_instance(Subclass, Descendant).
 | 
						|
 | 
						|
 | 
						|
	descendant_instances(Descendants) :-
 | 
						|
		self(Self),
 | 
						|
		(	setof(Descendant, descendant_instance(Self, Descendant), Descendants) ->
 | 
						|
			true
 | 
						|
		;	Descendants = []
 | 
						|
		).
 | 
						|
 | 
						|
 | 
						|
:- end_category.
 |