Class SEQUENCE-TEMPLATE
Package:
COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION
Class Precedence List:
SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
Known Subclasses:
VECTOR-TEMPLATE, LIST-TEMPLATE.
Slots:
None.
Description:
The SEQUENCE-TEMPLATE class denotes those object that are used to unify against a SEQUENCE.
Template Syntax:
#T(sequence . <destructuring template lambda list>)
The SEQUENCE-TEMPLATE syntax denotes a SEQUENCE object. A SEQUENCE-TEMPLATE must be unified against a SEQUENCE object. The elements of the sequence must be unified against the <destructuring template lambda list>
Examples:
cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(sequence 0 1 ?x 3 4 5))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(sequence 0 1 "FOO" 3 4 5))) --> Error: UNIFICATION-FAILURE cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(sequence _ _ ?x)) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (setq e (unify (list "foo" "bar" 42) #T(sequence _ &rest ?x))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) ("bar" 42) cl-prompt> (setq e (unify "I am a string" #T(sequence ?I _ &rest ?x))) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) "am a string" T cl-prompt> (find-variable-value '?I e) #\I T cl-prompt> (setq e (unify 42 #T(sequence _ &rest ?x))) --> Error: UNIFICATION-FAILURE cl-prompt> (setq e (unify #("foo" ?foo 42)) #T(sequence _ 33 ?x)) #<ENVIRONMENT xxx> cl-prompt> (find-variable-value '?x e) 42 T cl-prompt> (find-variable-value '?foo e) 33 T
Affected By:
None.
Exceptional Situations:
Unifying an SEQUENCE-TEMPLATE against a non-SEQUENCE object results in an UNIFICATION-FAILURE error being signaled.
See Also:
UNIFY
Notes:
None.