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 #<EMPTY UNIFY ENVIRONMENT: 1 frame @ #x22b212d2> 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 #<EMPTY UNIFY ENVIRONMENT: 1 frame @ #...>)
[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)))
--