From marcoxa at cs.nyu.edu Mon Apr 16 19:44:54 2007 From: marcoxa at cs.nyu.edu (Marco Antoniotti) Date: Mon, 16 Apr 2007 21:44:54 +0200 Subject: [cl-unification-devel] Re: [CL-UNIFICATION] MATCH, MATCHING macro's bug? In-Reply-To: <4dadc9270704161000x7ba030ev687f67c988a0a710@mail.gmail.com> References: <4dadc9270704161000x7ba030ev687f67c988a0a710@mail.gmail.com> Message-ID: <71B9566C-F61D-4AF8-9840-9D90F3FB79DC@cs.nyu.edu> Hi Masayuki it looks like the patch is good. Let me do a few tests and I will check it in. Apart from that, thanks for using CL-UNIFICATION. Cheers Marco On Apr 16, 2007, at 7:00 PM, Masayuki Onjo wrote: > Hello, Marco. > > I'm Masayuki Onjo, CL-UNIFICATION library user. The CL-UNIFICATION is > very cool stuff. > It's works well on AllegroCL's REPL, but COMPILE-FILE cause > following error. > > -- fib.lisp --- > (defun fib (n) > (unify:match-case (n) > (0 1) > (#T(number n) > (+ (fib (- n 1)) (fib (- n 2)))))) > > CL-USER> (compile-file "fib.lisp") > > Object # cannot be > written to a compiled file unless an applicable method is defined on > make-load-form. > [Condition of type PROGRAM-ERROR] > > It seems to be a bug of the MATCH macro expansion. > > [BUG] > (unify ',template ,object ,substitution)) > substitution := (make-empty-environment) > => (unify temlate object # #...>) > > [CORRECT] > (unify ',template ,object ,substitution)) > substitution := '(make-empty-environment) > => (unify temlate object (make-empty-environment)) > > I make following patch, it works for me. I'm very happy to hacking > with pattern-match-based macro. Thanks for your great work!! > > cvs diff: Diffing . > 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))) > > -- > Masayuki Onjo -- Marco Antoniotti -------------- next part -------------- An HTML attachment was scrubbed... URL: From marcoxa at cs.nyu.edu Wed Apr 18 09:08:48 2007 From: marcoxa at cs.nyu.edu (Marco Antoniotti) Date: Wed, 18 Apr 2007 11:08:48 +0200 Subject: [cl-unification-devel] Re: [CL-UNIFICATION] MATCH, MATCHING macro's bug? In-Reply-To: <4dadc9270704171535i38e859ffi5e0765f8327c8041@mail.gmail.com> References: <4dadc9270704161000x7ba030ev687f67c988a0a710@mail.gmail.com> <71B9566C-F61D-4AF8-9840-9D90F3FB79DC@cs.nyu.edu> <4dadc9270704171535i38e859ffi5e0765f8327c8041@mail.gmail.com> Message-ID: <02128D56-241F-41A4-B296-76AD70CAEFE5@cs.nyu.edu> 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 -- Marco Antoniotti -------------- next part -------------- An HTML attachment was scrubbed... URL: