Hi
I set up a new project on common-lisp.net
It is called CL-UNIFICATION
(http://common-lisp.net/project/cl-unification) and it contains a
generalized unifier for arbitrary Common Lisp data objects. That is to say
(unify:unify #2A((1 ?x 3) (4 2 6)) #2A((?y 2 3) (4 ?x 6)))
will "unify" and produce a substitution S such that
(unify:find-variable-value '?x S) ==> 2
(unify:find-variable-value '?y S) ==> 1
where the notation '?<name>' denotes - in a rather traditional way -
"logical variables".
NUMBERs, CONSes, CLOS instances, and structures are also handled.
Hopefully in the right way.
The code is mostly done and the documentation too. The documentation
does contain several broken links, but it should be usable.
The generalized unifier allows the construction of very flexible pattern
matchers (think DESTRUCTURING-BIND on steroids) and possibly allow for
the construction of ML-style programming idioms.
People willing to collaborate on this project are most welcome.
For the time being, please use the CVS setup to access the code. Thanks.
Enjoy
--
Marco