106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  | :- category(attributes). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- info([ | ||
|  | 		version is 1.0, | ||
|  | 		authors is 'Paulo Moura', | ||
|  | 		date is 2000/7/24, | ||
|  | 		comment is 'Dynamic attributes dictionary.']). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(attribute/2). | ||
|  | 
 | ||
|  | 	:- mode(attribute(?nonvar, ?nonvar), zero_or_more). | ||
|  | 
 | ||
|  | 	:- info(attribute/2, | ||
|  | 		[comment is 'Returns, by backtracking, all pairs of atribute-values.', | ||
|  | 		 argnames is ['Attribute', 'Value']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(attributes/1). | ||
|  | 
 | ||
|  | 	:- mode(attributes(-list), one). | ||
|  | 
 | ||
|  | 	:- info(attributes/1, | ||
|  | 		[comment is 'List of all pairs of atribute-values.', | ||
|  | 		 argnames is ['Attributes']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- private(attribute_/2). | ||
|  | 	:- dynamic(attribute_/2). | ||
|  | 
 | ||
|  | 	:- mode(attribute_(?nonvar, ?nonvar), zero_or_more). | ||
|  | 
 | ||
|  | 	:- info(attribute_/2, | ||
|  | 		[comment is 'Stores attributes values.', | ||
|  | 		 argnames is ['Attribute', 'Value']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(del_attribute/2). | ||
|  | 
 | ||
|  | 	:- mode(del_attribute(?nonvar, ?nonvar), zero_or_more). | ||
|  | 
 | ||
|  | 	:- info(del_attribute/2, | ||
|  | 		[comment is 'Deletes a matching attribute-value pair.', | ||
|  | 		 argnames is ['Attribute', 'Value']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(del_attributes/2). | ||
|  | 
 | ||
|  | 	:- mode(del_attributes(@term, @term), one). | ||
|  | 
 | ||
|  | 	:- info(del_attributes/2, | ||
|  | 		[comment is 'Deletes all matching attribute-value pairs.', | ||
|  | 		 argnames is ['Attribute', 'Value']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(set_attribute/2). | ||
|  | 
 | ||
|  | 	:- mode(set_attribute(+nonvar, +nonvar), one). | ||
|  | 
 | ||
|  | 	:- info(set_attribute/2, | ||
|  | 		[comment is 'Sets an attribute value.', | ||
|  | 		 argnames is ['Attribute', 'Value']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	:- public(set_attributes/1). | ||
|  | 
 | ||
|  | 	:- mode(set_attributes(+list), one). | ||
|  | 
 | ||
|  | 	:- info(set_attributes/1, | ||
|  | 		[comment is 'Sets a list of attribute-value pairs.', | ||
|  | 		 argnames is ['Attributes']]). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	attribute(Attribute, Value) :- | ||
|  | 		::attribute_(Attribute, Value). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	attributes(Attributes) :- | ||
|  | 		findall(Attribute, ::attribute_(Attribute, _), Attributes). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	del_attribute(Attribute, Value) :- | ||
|  | 		::retract(attribute_(Attribute, Value)). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	del_attributes(Attribute, Value) :- | ||
|  | 		::retractall(attribute_(Attribute, Value)). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	set_attribute(Attribute, Value) :- | ||
|  | 		::retractall(attribute_(Attribute, _)), | ||
|  | 		::assertz(attribute_(Attribute, Value)). | ||
|  | 
 | ||
|  | 
 | ||
|  | 	set_attributes([]). | ||
|  | 
 | ||
|  | 	set_attributes([Attribute-Value| Attributes]) :- | ||
|  | 		::retractall(attribute_(Attribute, _)), | ||
|  | 		::assertz(attribute_(Attribute, Value)), | ||
|  | 		set_attributes(Attributes). | ||
|  | 
 | ||
|  | 
 | ||
|  | :- end_category. |