Class STRUCTURE-OBJECT-TEMPLATE
Package:
COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION
Class Precedence List:
STRUCTURE-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STRUCTURE-OBJECT, T.
Known Subclasses:
None.
Slots:
None.
Description:
The STRUCTURE-OBJECT-TEMPLATE class denotes those object that are used to unify against any STRUCTURE-OBJECT.
Template Syntax:
#T(<CL structure class designator> [<reader function> <object>]*)
The STRUCTURE-OBJECT-TEMPLATE syntax denotes any CL object that is an instance of a STRUCTURE-OBJECT. The syntax is such that the <reader function> gets called against the instance against which the STRUCTURE-OBJECT-TEMPLATE is being UNIFYed. <object> can be any CL object, including a TEMPLATE (in which case the unification machinery proceeds recursively.)
Examples:
cl-prompt> (defstruct foo () (a 42)) FOO cl-prompt> (defstruct (baz (:include foo)) (b 33)) BAZ cl-prompt> (setf e (unify (make-foo) #T(foo foo-a 42))) #<ENVIRONMENT xxx> cl-prompt> (setf e (unify (make-baz) #T(foo foo-a 42))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setf e (unify (make-instance 'bar) #T(foo foo-a 42))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setf e (unify (make-instance 'baz) #T(baz the-a-in-baz 42))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(baz bazb 42))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setf e (unify (make-instance 'bar) #T(baz foo-a 42))) --> Error: UNIFICATION-FAILURE
Affected By:
None.
Exceptional Situations:
Unifying a STRUCTURE-OBJECT-TEMPLATE against a non-STRUCTURE-OBJECT object results in an UNIFICATION-FAILURE error being signaled.
Unifying a STRUCTURE-OBJECT-TEMPLATE denoting an instance of structure S1 against an instance of structure S2, results in an UNIFICATION-FAILURE error being signaled, when S1 is not in the class precedence list of S2.
See Also:
UNIFY
Notes:
None.