Hi Masayuki,

thanks.  Yep.  You are right.

Please stand by for a few days before these changes make it in the codebase.

Cheers

Marco




On Apr 18, 2007, at 12:35 AM, Masayuki Onjo wrote:

Hi, Marco

it looks like the patch is good.

Let me do a few tests and I will check it in.

Thanks!

I'm enjoying UNIFICATION power. The pattern matching is fun. :-)
There are some more bugs in CONTROL-FLOW macros.

CL-USER> (macroexpand-1 '(unify:match-case (x) (0 1) (1 2) (2 3)
(otherwise -1)))
(LET ((#:OBJECT-VAR-3066 X))
 (HANDLER-CASE (CL.EXT.DACF.UNIFICATION:MATCH (0 #:OBJECT-VAR-3066) 1)
               (CL.EXT.DACF.UNIFICATION::UNIFICATION-FAILURE NIL
                (HANDLER-CASE
                 (CL.EXT.DACF.UNIFICATION:MATCH (1 #:OBJECT-VAR-3066) 2)
                 (CL.EXT.DACF.UNIFICATION::UNIFICATION-FAILURE NIL
                  (HANDLER-CASE
                   (CL.EXT.DACF.UNIFICATION:MATCH (2 #:OBJECT-VAR-3066) 3)
                   (CL.EXT.DACF.UNIFICATION::UNIFICATION-FAILURE NIL
                    (OTHERWISE -1))))))))

I think (OTHERWISE -1) must be (PROGN -1) and

CL-USER> (macroexpand-1 '(unify:matching () ((0 x) 1) ((1 y) 2) (otherwise -1)))
(BLOCK CL.EXT.DACF.UNIFICATION:MATCHING
 (COND
  ((SETF #:UNIFICATION-ENV-3070
           (IGNORE-ERRORS
            (CL.EXT.DACF.UNIFICATION:UNIFY '0 X

(CL.EXT.DACF.UNIFICATION:MAKE-EMPTY-ENVIRONMENT))))
   (LET* ()
     1))
  ((SETF #:UNIFICATION-ENV-3071
           (IGNORE-ERRORS
            (CL.EXT.DACF.UNIFICATION:UNIFY '1 Y

(CL.EXT.DACF.UNIFICATION:MAKE-EMPTY-ENVIRONMENT))))
   (LET* ()
     2))
  (NIL
   (ERROR 'CL.EXT.DACF.UNIFICATION::UNIFICATION-NON-EXHAUSTIVE :FORMAT-CONTROL
          "Non exhaustive matching."))
  (OTHERWISE -1)))

(OTHERWISE -1) should be (T -1), too. I made following patch.

Index: match-block.lisp
===================================================================
RCS file: /project/cl-unification/cvsroot/cl-unification/match-block.lisp,v
retrieving revision 1.6
diff -r1.6 match-block.lisp
13c13
<                            (substitution (make-empty-environment))
---
                           (substitution '(make-empty-environment))
63c63
<                           (default-substitution (make-empty-environment)))
---
                          (default-substitution '(make-empty-environment)))
139c139
<              ,@(when default-clause (list default-clause)))))
---
             ,@(when default-clause (list `(T ,(cdr default-clause)))))))
191c191
<                  otherwise-clause
---
                 `(progn ,(cdr otherwise-clause))

-- 
Masayuki Onjo <onjo@lispuser.net>

--
Marco Antoniotti