Yep.  That makes sense.  The only caveat is that VECTOR-TEMPLATEs check some extra features of vectors.
The unifier does not do much with this at this time, but it could.

In any case, go ahead with the patch.  Nothing will prevent us from re-introducing a more specialized

unify (a vector) (vt vector-template)

later on.

Cheers


Marco



On Feb 17, 2011, at 21:19 , Robert Brown wrote:

I think vectors should unify with sequence templates.  This expression

   (unify #(0 1 42 3 4 5) #T(sequence 0 1 ?x 3 4 5))

currently fails.  How does the following patch look?

bob

==========


*** test/unification-tests.lisp#1 Wed Feb 16 16:51:33 2011
--- test/unification-tests.lisp Thu Feb 17 15:06:27 2011
***************
*** 99,104 ****
--- 99,106 ----
     (test t (unify:environment-p (unify #C(0 1) #T(complex #C(0 1)))))

     (test '(42 T) (v? '?x (unify #T(number ?x) 42)) :multiple-values t)
+     (test '(42 T) (v? '?x (unify #(0 1 42 3 4 5) #T(sequence 0 1 ?x 3 4 5)))
+           :multiple-values t)

     (test-error (unify 42 #T(float 42.0))
                 :condition-type 'unification-failure

*** unifier.lisp#1 Wed Feb 16 16:51:33 2011
--- unifier.lisp Thu Feb 17 15:09:24 2011
***************
*** 476,482 ****
          :format-arguments (list a b)))


! (defmethod unify ((a vector) (b vector-template)
                   &optional (env (make-empty-environment))
                   &key &allow-other-keys)
   (let ((template-lambda-list (sequence-template-lambda-list b))
--- 476,482 ----
          :format-arguments (list a b)))


! (defmethod unify ((a vector) (b sequence-template)
                   &optional (env (make-empty-environment))
                   &key &allow-other-keys)
   (let ((template-lambda-list (sequence-template-lambda-list b))

_______________________________________________
cl-unification-devel site list
cl-unification-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/cl-unification-devel


--
Marco Antoniotti