Attrib of Obj
(enhanced in 4.0)
Attrib Of Obj
Returns the value of attribute Attrib of the object identified by Obj.
Examples:
- Units of Time → 'Years'
or
- 'Units' of 'Time' → 'Years'
Library
Special
Using Computed Parameters
Both parameters, Attrib and Obj, can be either statically or dynamically bound, which is to say, the identification of the attribute and object can be made either at parse time or at evaluation time. Often in Meta-Inference algorithms, the attribute or object is a computed value, and thus the attribute or object isn't completely identified until the expression is evaluated.
If the Attrib parameter preceding the OF keyword is a literal attribute name, then it is bound at parse time. In this case only, the OF keyword is optional. Otherwise, if the parameter preceding OF is any other expression, the expression is evaluated at run time, but must evaluate either to text containing the attribute name, to a varTerm of an attribute object, or to a list or array containing these, otherwise an error results.
If the Obj parameter following the Of keyword is an object identifier, then obj is bound at parse time. This means that the attribute of the named object is returned, not the attribute of the object computed by the variable. When using Attrib OF Obj in a meta-inference algorithm, you must keep this straight. The following example demonstrates. Suppose global Variable objects, Va1 and Va2, are defined by expressions that identify an object, A, i.e.:
Variable Va1 := VarTerm(A) Variable Va2 := 'A'
Then OF in the following cases evaluate as shown:
Identifier Of Va1 → 'Va1' { statically bound } Identifier of Va2 → 'Va2' { statically bound }
To dynamically reference the object computed by a variable, you must write the Of expression in such a way that the Obj parameter is not itself a valid object identifier. There are two method for doing this - using a local variable declared with Var..Do (which is just an alias for a value, and not a object that has identifiers), or by calling a function that returns the computed object identification. In either case, the resolved value can be either a textual identifier of the desired object, a varTerm, or a list or array of these. In the above examples, the several variations are possible:
Var v:=Va1; Identifier Of v → 'A' Var v:=Va2; Identifier Of v → 'A' Identifier Of (value of Va1) → 'A' Identifier Of Mid(Va1) → 'A' Identifier Of Evaluate('Va1') → 'A' Identifier Of Evaluate(Va1) → 'A'
Note that the parens in the third line above are required so that it doesn't parse as
((Identifier Of Value) Of Va1) → A { the varTerm A, same as Value of Va1 }
Also note that Of can be used to retrieve attributes of functions, so for example,
Description Of Evaluate
returns the description of the evaluate function, while
Description Of Evaluate('Va1')
returns the description of Va1.
Enable comment auto-refresher