[ Term Manipulation | Reference Manual | Alphabetic Index ]

add_attribute(?Var, ?Attribute, +AttrName)

Add dynamically an attribute to a variable.
Any term.
Any term.
Integer or atom.


Adds an attribute with name AttrName and value Attribute to a variable. There must have been a preceding attribute declaration (meta_attribute/2) for AttrName.

If Var is a free variable, it will be turned into an attributed variable with a single attribute Attribute whose name is AttrName. If Var is already an attributed variable with other attributes, then the new attribute will be added to it.

Otherwise, if the attribute slot for AttrName is already occupied, or Var is already instantiated, then a new attributed variable with the single attribute Attribute is created, and subsequently unified with Var.

If AttrName is an atom, the attribute corresponds to a previous meta_attribute declaration. If AttrName is an integer, it is directly used as an attribute index slot (this is mainly used by the compiler to resolve attribute references at compile time).

Modes and Determinism

Fail Conditions

Fails if Var is not a free variable and its unification with the new attributed variable fails


(270) undefined variable attribute
There is no attribute declared as AttrName.
(6) out of range
AttrName is an integer, but not a valid attribute index


[eclipse 6]: meta_attribute(extra, []).

[eclipse 3]: add_attribute(X, a, extra), printf("%QPMw", X).
X{suspend : _g270 , extra : a}
X = X

See Also

meta_attribute / 2, add_attribute / 2