Tue Mar 13 15:29:16 UTC 2012 mantoniotti@common-lisp.net
* Added TIMESTAMP.
Tue Mar 13 15:28:28 UTC 2012 mantoniotti@common-lisp.net
* Copyright updated.
Tue Mar 13 15:28:15 UTC 2012 mantoniotti@common-lisp.net
* Copyright updated.
Thu Jun 16 00:10:47 UTC 2011 mantoniotti@common-lisp.net
* Added "CL-UNIFICATION" as package nickname to match the .asd and .system specs.
Sat Apr 2 04:39:32 UTC 2011 rbrown@common-lisp.net
* Use *unify-string-case-sensitive-p* consistently.
Change the documentation.
Sat Apr 2 04:19:09 UTC 2011 rbrown@common-lisp.net
* match-block.lisp: Use &body in match-case and matchf-case so
code that uses them is correctly indented by editors.
Sat Apr 2 04:16:51 UTC 2011 mantoniotti@common-lisp.net
* Copyright updated.
Sat Apr 2 04:11:54 UTC 2011 mantoniotti@common-lisp.net
* Updated copyright info and a News.
Sat Apr 2 04:09:17 UTC 2011 mantoniotti@common-lisp.net
* ChangeLog updated.
Sat Apr 2 04:08:13 UTC 2011 mantoniotti@common-lisp.net
* Remove Thumbs.db and friends
Sat Apr 2 04:05:30 UTC 2011 mantoniotti@common-lisp.net
* Exported a few more symbols.
Sat Apr 2 04:05:18 UTC 2011 mantoniotti@common-lisp.net
* Minor changes (added COPYING information and other minutiae).
Sat Apr 2 04:01:24 UTC 2011 mantoniotti@common-lisp.net
* Changed some environment functions and improved the DUMP-* ones.
Sat Apr 2 03:51:38 UTC 2011 mantoniotti@common-lisp.net
* Acknowledgements updated.
Sat Apr 2 03:50:19 UTC 2011 rbrown@common-lisp.net
* Delete trailing whitespace. In lambda-list-parsing.lisp this fixes a bug
with ~@ format directives.
Sat Apr 2 02:51:32 UTC 2011 rbrown@common-lisp.net
* unifier.lisp: Allow vectors to unify with sequence templates.
test/unification-tests.lisp: new test to verify the change
Sat Apr 2 02:49:30 UTC 2011 rbrown@common-lisp.net
* Add entry for cl-unification-test.asd.
Sat Apr 2 02:47:50 UTC 2011 rbrown@common-lisp.net
* Add cl-unification-test.asd
Make (asdf:test-system 'cl-unification) work.
Sat Apr 2 02:37:58 UTC 2011 rbrown@common-lisp.net
* Make sure that classes referenced in #T forms are defined
before the forms are read. This fixes compilation of
file unification-tests.lisp.
Tue Mar 29 23:22:33 UTC 2011 mantoniotti@common-lisp.net
* Copyright dates updated.
Tue Mar 29 23:20:53 UTC 2011 mantoniotti@common-lisp.net
* ChangeLog updated.
Tue Mar 29 22:59:37 UTC 2011 mantoniotti@common-lisp.net
* Added debugging functions DUMP-FRAME and DUMP-ENVIRONMENT.
Tue Jun 15 03:21:37 UTC 2010 pix@kepibu.org
* Pull variable binding out of %match-expander
I'd like to tell you this is part of a plan to simplify %match-expander, but in
all honesty, the only reason I'm doing it is because I found myself thinking
with-unification-variables would be a handy macro while working on a private
extension to cl-unification, and I didn't want to duplicate the code.
Sun Feb 7 08:42:39 UTC 2010 pix@kepibu.org
* Marginally more straightforward?
Sun Feb 7 07:40:23 UTC 2010 pix@kepibu.org
* Declare ftype of find-variable-value and v? properly
Sun Feb 7 07:33:38 UTC 2010 pix@kepibu.org
* Fix export of lib-dependent symbols
Sun Feb 7 07:30:06 UTC 2010 pix@kepibu.org
* Specialization on the second arg of print-object is not allowed
Fri Feb 5 09:30:48 UTC 2010 pix@kepibu.org
* Whoops. Typo in test.
Fri Feb 5 09:04:00 UTC 2010 pix@kepibu.org
* Create a named-readtable if the named-readtables library is also loaded
Because (in-readtable ...) is a beautiful thing.
Fri Feb 5 09:02:42 UTC 2010 pix@kepibu.org
* Add (enable-template-reader), so it is easy to turn on the template reader
Useful when there are conflicts on #T, such as with closure-html.
Fri Feb 5 08:58:50 UTC 2010 pix@kepibu.org
* Export new MATCH* macros.
Fri Feb 5 03:21:40 UTC 2010 pix@kepibu.org
* Unified docstrings.
Thu Feb 4 07:32:18 UTC 2010 pix@kepibu.org
* Merge all MATCH* macros into a single, unified expansion function
And, because it's now trivial, add MATCH-COND, MATCHF-COND, MATCH-ECASE, and
MATCHF-ECASE.
Still to do: Merge documentation of functions so there's less copy-pasta in the
documentation strings.
Thu Feb 4 07:31:47 UTC 2010 pix@kepibu.org
* Duplicate nested match-case tests for matchf-case.
Thu Feb 4 07:20:04 UTC 2010 pix@kepibu.org
* Make "inner-error" and "outer-error" proper conditions.
Wed Feb 3 09:56:58 UTC 2010 pix@kepibu.org
* Make condition printable, for easier manually stepping through tests.
Wed Feb 3 09:53:59 UTC 2010 pix@kepibu.org
* These are no longer failures. Woo!
Mon Jan 25 07:38:54 UTC 2010 pix@kepibu.org
* Moar tests!
Mon Jan 25 07:38:27 UTC 2010 pix@kepibu.org
* Consider unexpected errors as test failures
...why is this not default behavior?
Mon Jan 25 07:03:27 UTC 2010 pix@kepibu.org
* (cond (a b) (c d) nil) isn't really valid
Sat Jan 23 00:53:33 UTC 2010 pix@kepibu.org
* How did .clbuild-skip-update even get /in/ the repo?
Sat Jan 23 00:31:24 UTC 2010 pix@kepibu.org
* Make tests file loadable
Sat Jan 23 00:19:32 UTC 2010 pix@kepibu.org
* DTRT when asdf-system-connections is available
Thu Jan 21 01:56:47 UTC 2010 pix@kepibu.org
* Rather than a new UNIFY** function, make UNIFY* work that way
Let errors which are not UNIFICATION-FAILUREs find their way out of UNIFY*.
Wed Jan 20 08:28:50 UTC 2010 pix@kepibu.org
* Can't IN-PACKAGE without a previous DEFPACKAGE.
Wed Jan 20 08:27:09 UTC 2010 pix@kepibu.org
* Handle :case-sensitive properly
If the first clause doesn't match due to mismatched case, it would
roll down to the second clause, causing case-differing strings to
erroneously match. By checking for case again, we can avoid this.
Note, however, that this does not fix the similar but unrelated
inconsistent usage of *unify-string-case-sensitive-p* and
*unify-string-case-insensitive-p* (the former being used in the code
and the latter appearing in documentation). That bug will remain
until the canonical form is decided upon.
Wed Jan 20 08:09:59 UTC 2010 pix@kepibu.org
* Fix typo (connot -> cannot)
Fri Jan 15 08:55:05 UTC 2010 pix@kepibu.org
* Redefine MATCH-CASE in terms of MATCHING
This both greatly simplifies the MATCH-CASE macro as well as its expansion.
HOWEVER, this version is *NOT* 100% compatible with the previous version.
Specifically, UNIFICATION-FAILUREs signalled from within clause-forms will /not/
cause the next unification clause to be attempted, but will instead propogate
outward as the -case name suggests they should.
That is,
(ignore-errors
(match-case ("foo")
("foo" (error 'unification-failure ...))
(t :default)))
=> :default ;; before patch
=> nil, # ;; after patch
Fri Jan 15 08:49:26 UTC 2010 pix@kepibu.org
* Only use one variable to store the unification environment in MATCHING
Because of the way MATCHING expands, and what UNIFY* returns, each
(setf #:env (unify* ...))
call will do one of two things: it will set #:env to NIL or it will set #:env to
an ENVIRONMENT structure.
If #:env is set to NIL--the same value it entered the (setf) with!--the COND
will continue on to the next clause.
If #:env is set to an ENVIRONMENT structure, none of the remaining (setf)
clauses will be evaluated.
Thus, because the variable will only ever be set to a non-nil value once, this
should be perfectly safe.
Fri Jan 15 07:59:02 UTC 2010 pix@kepibu.org
* Make MATCHING agree with MATCH[F][-CASE] about the conditions of failure
Rather than skipping to the next clause on any error, UNIFICATION-FAILUREs--and
/only/ UNIFICATION-FAILUREs--skip to the next clause.
Fri Jan 15 07:48:53 UTC 2010 pix@kepibu.org
* Use &body instead of &rest for (arguably) prettier auto-indentation
Tue Jan 12 09:20:28 UTC 2010 pix@kepibu.org
* Fix (matching (otherwise ...))
(matching (otherwise ...)) expands into (cond (otherwise ...)), which
generates an unbound-variable error when executed, because COND does
not special-case OTHERWISE as CASE does.
Tue Jan 12 09:08:23 UTC 2010 pix@kepibu.org
* Extract the bits that wrap forms with bindings for template variables
In some cases, this patch swaps the order of execution of
%TEMPLATE-FOR-MATCH and COLLECT-TEMPLATE-VARS. I'm pretty sure this
doesn't have any noticable effect, but thorough testing is probably
wise.
Tue Jan 12 08:37:44 UTC 2010 pix@kepibu.org
* Use (unify* ...) rather than (ignore-errors (unify ...))
Same thing, so might as well use the convenience function.
Tue Jan 12 08:03:54 UTC 2010 pix@kepibu.org
* Extract template handling of MATCH[ING] into %TEMPLATE-FOR-MATCH
Thu Dec 17 17:02:42 UTC 2009 mantoniotti
* ChangeLog updated.
Thu Dec 17 16:57:45 UTC 2009 mantoniotti
* Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com).
Thu Dec 17 16:44:46 UTC 2009 mantoniotti
* Minor cosmetic changes.
Thu Dec 17 16:43:51 UTC 2009 mantoniotti
* Exported MATCHF-CASE.
Thu Dec 17 16:43:12 UTC 2009 mantoniotti
* Fixed a couple of problems with some accessors in the NUMBER,
Fixed a couple of problems with some accessors in the NUMBER,
STRUCTURE-OBJECT and STANDARD-OBJECT templates.
Thu Dec 17 16:41:38 UTC 2009 mantoniotti
* Added MATCHF* macros.
Fri Apr 17 22:44:17 UTC 2009 mantoniotti
* ChangeLog updated.
Fri Apr 17 22:42:46 UTC 2009 mantoniotti
* System definitions files (.asd and .system) modified in order to make
System definitions files (.asd and .system) modified in order to make
dependency form CL-PPCRE optional.
Fri Apr 17 22:40:29 UTC 2009 mantoniotti
* Removed REQUIRE of CL-PPCRE. Too brittle.
Fri Apr 17 07:53:58 UTC 2009 mantoniotti
* Added a few exports and changed the actual package name (i.e., I put
Added a few exports and changed the actual package name (i.e., I put
my money where my mouth is; the "published" package name is now a
nickname).
Fri Apr 17 07:52:25 UTC 2009 mantoniotti
* Fixed a couple of snags. APPLY-SUBSTITUTION was not applied
Fixed a couple of snags. APPLY-SUBSTITUTION was not applied
recursively and it was barfing on numbers.
Current version is still incomplete, but it serves as a template for
further development.
Wed Apr 15 14:33:35 UTC 2009 mantoniotti
* ChangeLog updated.
Wed Apr 15 10:24:28 UTC 2009 mantoniotti
* Modified Files:
Modified Files:
test/unification-tests.lisp
Added Files:
lib-dependent/cl-ppcre-template.lisp
The cl-ppcre-template reuses E. Weitz's wonderful CL-PPCRE library
to provide a seamless (YMMV) reuse of regular expressions within
CL-UNIFICATION.
Wed Apr 15 10:18:59 UTC 2009 mantoniotti
* Added LAMBDA-TEMPLATE.
Wed Apr 15 10:17:48 UTC 2009 mantoniotti
* Added some functionality to extract all variables and/or all values
Added some functionality to extract all variables and/or all values
from an environment or a frame.
Wed Apr 15 10:16:24 UTC 2009 mantoniotti
* Added MATCHF (whose name may change) to simplify the
Added MATCHF (whose name may change) to simplify the
'destructuring-bind'-like syntax and behavior of the matching
facilities.
Wed Apr 15 10:14:59 UTC 2009 mantoniotti
* Dates updated.
Wed Apr 15 10:14:24 UTC 2009 mantoniotti
* Major API change to 'unify'. It now accepts keywords. Old code
Major API change to 'unify'. It now accepts keywords. Old code
shouls not be affected, but new code is now more flexible. Look the
the STRING and (new) CHARACTER methods to see how this change is
affecting the code.
Wed Apr 15 10:12:22 UTC 2009 mantoniotti
* Some 'diff' unfathomable change happened.
Wed Apr 15 10:10:25 UTC 2009 mantoniotti
* Added exports of a few symbols.
Wed Apr 15 10:06:40 UTC 2009 mantoniotti
* Fixed a few snags and added "lib-dependent" module.
Wed Apr 15 10:05:58 UTC 2009 mantoniotti
* Added some functionality and comments.
Sun Jul 13 13:36:42 UTC 2008 mantoniotti
tagged rev-1_0-cleaned-up
Sun Jul 13 13:36:42 UTC 2008 mantoniotti
* Changelog updated.
Sun Jul 13 13:33:48 UTC 2008 mantoniotti
* Added credits to a few people. Missing ones should bug the maintainer :)
Sun Jul 13 13:30:28 UTC 2008 mantoniotti
* Copyright dates updated.
Sun Jul 13 13:28:48 UTC 2008 mantoniotti
* Cleaning up.
Cleaning up.
Committing in .
Removed Files:
unification.asd unification.system
Sun Jul 13 13:26:38 UTC 2008 mantoniotti
* Clenaing up.
Clenaing up.
Committing in .
Removed Files:
templates-hierarchy-saved.lisp
Sun Jul 13 13:20:01 UTC 2008 mantoniotti
* Instructions updated.
Sun Jul 13 13:17:29 UTC 2008 mantoniotti
* Copyright dates updated.
Sun Jul 13 13:14:56 UTC 2008 mantoniotti
* Added file.
Sun Jul 13 13:10:48 UTC 2008 mantoniotti
* Some modification added. Exported symbols and reverted
Some modification added. Exported symbols and reverted
reader macro #T to construct template instances at read time.
Added MAKE-LOAD-FORM method for templates which should fix problem with
SBCL.
Committing in .
Modified Files:
substitutions.lisp templates-hierarchy.lisp
unification-package.lisp variables.lisp
Sun Jul 13 12:51:14 UTC 2008 mantoniotti
* Added explicit :source-extension to accomodate Allegro CL.
Thu Jul 10 17:39:16 UTC 2008 mantoniotti
* Removed EXPORT of APPLY-SUBSTITUTION as it is already in the DEFPACKAGE.
Fri Nov 9 13:56:40 UTC 2007 mantoniotti
* Changed the position of the disclaimer.
Fri Nov 9 13:47:00 UTC 2007 mantoniotti
* ChangeLog updated.
Fri Nov 9 13:43:20 UTC 2007 mantoniotti
* Made several changes to improve MATCH-CASE (following a note from Ivan
Made several changes to improve MATCH-CASE (following a note from Ivan
Boldyrev from a long time ago), MATCHING and MATCH.
Else-clauses are now handled correctly (AFAICT).
Single variable templates in MATCH, MATCH-CASE and MATCHING clauses do
not need to be quoted.
MATCHING was generating one gensym'ed variable per clause without
creating an appropriate enclosing LET. This is now fixed.
Fri Nov 9 13:35:55 UTC 2007 mantoniotti
* Changed the top comment and added a (:copier nil) option to the
Changed the top comment and added a (:copier nil) option to the
ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the
file.
Fri Nov 9 13:34:18 UTC 2007 mantoniotti
* Added the new system building files with more meaningful names
Added the new system building files with more meaningful names
w.r.t. the name of the library.
Fri Nov 9 13:30:53 UTC 2007 mantoniotti
* Marked the two system building files as 'obsolete', before removing
Marked the two system building files as 'obsolete', before removing
them from the repository. The new files are prefixed by 'cl-'.
Mon May 21 17:12:58 UTC 2007 mantoniotti
* ChangeLog updated.
Mon May 21 17:11:42 UTC 2007 mantoniotti
* Updated copyrights dates and changed a few instructions in the
Updated copyrights dates and changed a few instructions in the
INSTALLATION file.
Mon May 21 17:10:26 UTC 2007 mantoniotti
* Updated copyrights dates.
Mon May 21 16:55:57 UTC 2007 mantoniotti
* ChangeLog updated.
Mon May 21 12:33:05 UTC 2007 mantoniotti
* See previous message.
Mon May 21 12:29:24 UTC 2007 mantoniotti
* Added file 'apply-substitition.lisp' with a few new functions that are
Added file 'apply-substitition.lisp' with a few new functions that are
a start for the variable substitition operation.
New fixes to the MATCH and MATCH-CASE macros. They should now work as
advertised.
Minor changes to other files: added exports to package file, fixed
.system and .asd files.
Wed Jul 19 21:52:34 UTC 2006 mantoniotti
* Fixed two problems with the unifier machinery.
Fixed two problems with the unifier machinery.
The first one had to do with the matching of NIL against SYMBOL and LIST
in several places: essentially, the problem is incongruencies in the
results of COMPUTE-APPLICABLE-METHODS in these cases. I think I caught
most of them: unification of lists and the occur-check were the obvious
places where things went awry.
The second problem had to do with the reader macro #T. The original
code generated an object at read time, which is not such a good idea.
Now the code generates a call to MAKE-TEMPLATE with is evaluated later.
Incidentally, the reader macro function is now called |sharp-T-reader|, in
order to placate Emacs fontification.
Modified Files:
templates-hierarchy.lisp unifier.lisp
Wed Jul 19 20:28:49 UTC 2006 mantoniotti
* Added missing export.
Tue Oct 25 19:17:33 UTC 2005 mantoniotti
* Fixed problem with the unification of a list with a
Fixed problem with the unification of a list with a
SEQUENCE-TEMPLATE. The implementation was not checking that the
length of the list was compatible with the length of the required
elements in the template.
Apart from that, keyword matching is still unimplemented.
Tue Oct 25 19:08:15 UTC 2005 mantoniotti
* Fixed problem with checking the presence of T and OTHERWISE clauses in
Fixed problem with checking the presence of T and OTHERWISE clauses in
MATCHING.
Mon Jul 25 15:15:08 UTC 2005 mantoniotti
* Minor cleanup.
Fri May 20 16:41:16 UTC 2005 mantoniotti
* Fixed typos.
Fri May 20 16:38:06 UTC 2005 mantoniotti
* Fixed bug in documentation.
Fri May 20 16:33:24 UTC 2005 mantoniotti
* Page updated.
Fri May 20 16:27:05 UTC 2005 mantoniotti
* Incremental change to page.
Fri May 20 16:18:33 UTC 2005 mantoniotti
* Fixed a documentation bug.
Fixed a documentation bug.
Thanks to Norman Werner for spotting it.
Fri May 20 15:47:44 UTC 2005 mantoniotti
* Added link to "Mailing Lists" page.
Fri May 20 15:19:53 UTC 2005 mantoniotti
* Fixed two major bugs reported by Norman Werver. Unification of
Fixed two major bugs reported by Norman Werver. Unification of
strings and symbols and of numers and symbols was not recurring on
VAR-UNIFY, as required; thus
(unify '(?x ?x) '("asd" "qweert"))
and
(unify '(foo ?x baz) '(foo 42 ?x))
would succed.
The two cases are now fixed.
Thu May 19 23:00:18 UTC 2005 mantoniotti
* Year updated.
Thu May 19 22:58:34 UTC 2005 mantoniotti
* File added.
Thu May 19 22:54:27 UTC 2005 mantoniotti
* ChangeLog updated.
Thu May 19 22:52:52 UTC 2005 mantoniotti
* Updated copyright notice.
Thu May 19 22:49:59 UTC 2005 mantoniotti
* Changed the DISCLAIMER parts in the files, in order to clarify the licensing
Changed the DISCLAIMER parts in the files, in order to clarify the licensing
of the code.
Wed Apr 27 21:04:59 UTC 2005 mantoniotti
* Fixed factorial example.
Wed Apr 27 21:04:36 UTC 2005 mantoniotti
* Added IGNORABLE declaration to MATCH macro expansion.
Added IGNORABLE declaration to MATCH macro expansion.
This is useful in quieting various compilers.
Wed Apr 27 20:54:05 UTC 2005 mantoniotti
* Added acknowledgement to Peter Scott.
Wed Apr 27 20:52:09 UTC 2005 mantoniotti
* Fixed bug in condition signaling within MATCH-CASE.
Wed Apr 27 20:44:25 UTC 2005 mantoniotti
* Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs.
Fixed bugs in COLLECT-TEMPLATE-VARS for NUMBER-TEMPLATEs.
If a variable was present, then the method was not returning a list.
The treatment of constants like PI was also incorrect, as the numeric
value was returned. Retunrning () seems the right thing to do
instead.
Wed Apr 27 20:41:56 UTC 2005 mantoniotti
* Added MATCH-CASE macro. Slightly modified from the version provided
Added MATCH-CASE macro. Slightly modified from the version provided
by Peter Scott.
Wed Apr 27 19:31:18 UTC 2005 mantoniotti
* Added unification.asd file.
diff -rN -u old-cl-unification-1/ACKNOWLEDGEMENTS new-cl-unification-1/ACKNOWLEDGEMENTS
--- old-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-24 22:58:32.000000000 +0000
@@ -7,6 +7,7 @@
fixes.
Boldyrev, Ivan
+Brown, Robert
Korablin, Vladimir V.
Leuner, John
McManus, Russell
diff -rN -u old-cl-unification-1/COPYING new-cl-unification-1/COPYING
--- old-cl-unification-1/COPYING 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/COPYING 2013-07-24 22:58:32.000000000 +0000
@@ -1,4 +1,4 @@
-Copyright (c) 2004 Marco Antoniotti
+Copyright (c) 2004-2012 Marco Antoniotti
All rights reserved.
Permission is hereby granted, without written agreement and without
@@ -12,10 +12,10 @@
THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR(S),
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-THE AUTHOR(S) UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
-PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHOR(S) HAVE NO
-OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
+THE AUTHOR(S) UNIVERSITY, COMPANY AND/OR AFFILIATION SPECIFICALLY
+DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
+THE AUTHOR(S) HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
+UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff -rN -u old-cl-unification-1/ChangeLog new-cl-unification-1/ChangeLog
--- old-cl-unification-1/ChangeLog 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/ChangeLog 2013-07-24 22:58:32.000000000 +0000
@@ -1,3 +1,103 @@
+2011-03-28 Robert Brown
+
+ * match-block.lisp: Use &body in match-case and matchf-case so
+ code that uses them is correctly indented by editors.
+
+2011-02-27 author
+
+ * .cvsignore: Updated.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable:
+ Removed Files:
+ Thumbs.db Thumbs.db:encryptable
+
+2011-02-26 author
+
+ * .cvsignore: Updated.
+
+ * variables.lisp, unifier.lisp:
+ Minor changes (added COPYING information and other minutiae).
+
+ * unification-package.lisp: Exported a few more symbols.
+
+ * templates-hierarchy.lisp:
+ Minor changes (added COPYING information and other minutiae).
+
+ * substitutions.lisp:
+ Changed some environment functions and improved the DUMP-* ones.
+
+ * match-block.lisp, lambda-list-parsing.lisp, cl-unification.system, cl-unification.asd, cl-unification-lib.asd, apply-substitution.lisp:
+ Minor changes (added COPYING information and other minutiae).
+
+ * ACKNOWLEDGEMENTS: Acknowledgements updated.
+
+2011-02-24 author
+
+ * ChangeLog, apply-substitution.lisp, cl-unification.system, lambda-list-parsing.lisp, lib-dependent/cl-ppcre-template.lisp, match-block.lisp, templates-hierarchy.lisp, unifier.lisp:
+ Delete trailing whitespace. In lambda-list-parsing.lisp this fixes a bug
+ with ~@ format directives.
+
+ * ChangeLog, test/unification-tests.lisp, unifier.lisp:
+ unifier.lisp: Allow vectors to unify with sequence templates.
+ test/unification-tests.lisp: new test to verify the change
+
+2011-02-24 Robert Brown
+
+ * lambda-list-parsing.lisp: Delete trailing whitespace that turned
+ ~@ into a bogus format directive by converting it into
+ ~@
+
+ * unifier.lisp, apply-substitution.lisp, cl-unification.system
+ * match-block.lisp, templates-hierarchy.lisp, unifier.lisp
+ * lib-dependent/cl-ppcre-template.lisp: delete trailing whitespace
+
+2011-02-24 Robert Brown
+
+ * unifier.lisp: Allow vectors to unify with sequence templates.
+ * test/unification-tests.lisp: new test to verify the change
+
+2011-02-16 Robert Brown
+
+ * cl-unification.asd: Add support for asdf:test-system.
+
+ * cl-unification-test.asd: File added.
+
+2011-01-18 author
+
+ * unifier.lisp:
+ After a careful reading of PAIP fixed a very subtle bug in VAR-UNIFY
+ that prevented the correct unification of:
+
+ (?x ?y a)
+
+ with
+
+ (?y ?x ?x)
+
+ * substitutions.lisp:
+ Added debugging functions DUMP-FRAME and DUMP-ENVIRONMENT.
+
+ * .cvsignore: Added .cvsignore file.
+
+2009-12-17 author
+
+ * ChangeLog: ChangeLog updated.
+
+ * lib-dependent/cl-ppcre-template.asd: Initial checkin.
+
+ * lib-dependent/cl-ppcre-template.lisp:
+ Patched to use Cl-PPCRE:SCAN-TO-STRINGS (thanks to Pixel // pinterface [a] gmail dot com).
+
+ * unifier.lisp: Minor cosmetic changes.
+
+ * unification-package.lisp: Exported MATCHF-CASE.
+
+ * templates-hierarchy.lisp:
+ Fixed a couple of problems with some accessors in the NUMBER,
+ STRUCTURE-OBJECT and STANDARD-OBJECT templates.
+
+ * match-block.lisp: Added MATCHF* macros.
+
2009-12-17 author
* lib-dependent/cl-ppcre-template.asd: Initial checkin.
diff -rN -u old-cl-unification-1/INSTALLATION new-cl-unification-1/INSTALLATION
--- old-cl-unification-1/INSTALLATION 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/INSTALLATION 2013-07-24 22:58:32.000000000 +0000
@@ -5,18 +5,26 @@
Issuing
- (mk:load-system "unification")
+ (mk:load-system "CL-UNIFICATION")
or
- (mk:compile-system "unification")
+ (mk:compile-system "CL-UNIFICATION")
will make the UNIFY package available.
+There is also an ASDF system definition for those who use this system.
+
+Issuing
+
+ (asdf:oos 'asdf:load-op "CL-UNIFICATION")
+
+should make the library available in your environment.
+
If your CL implementation is ASDF-INSTALL aware, you should also be
able to just say
- (asdf-install:install "unification")
+ (asdf-install:install "CL-UNIFICATION")
provided that the package is unpacked in an ASDF-INSTALL known
directory.
diff -rN -u old-cl-unification-1/README new-cl-unification-1/README
--- old-cl-unification-1/README 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/README 2013-07-24 22:58:32.000000000 +0000
@@ -1,6 +1,6 @@
CL-UNIFICATION
-Marco Antoniotti 2004
+Marco Antoniotti (c) 2004-2011
The directory containing this file you are reading should contain the
code and the documentation of the CL-UNIFICATION package.
diff -rN -u old-cl-unification-1/TIMESTAMP new-cl-unification-1/TIMESTAMP
--- old-cl-unification-1/TIMESTAMP 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/TIMESTAMP 2013-07-24 22:58:32.000000000 +0000
@@ -0,0 +1 @@
+20120116
diff -rN -u old-cl-unification-1/apply-substitution.lisp new-cl-unification-1/apply-substitution.lisp
--- old-cl-unification-1/apply-substitution.lisp 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/apply-substitution.lisp 2013-07-24 22:58:32.000000000 +0000
@@ -1,8 +1,10 @@
-;;; -*- Mode: Lisp -*-
+;;;; -*- Mode: Lisp -*-
-;;; substitutions.lisp
-;;; General CL structures unifier.
-;;; Substitution definitions.
+;;;; apply-substitutions.lisp --
+;;;; General CL structures unifier.
+;;;; Substitution definitions.
+;;;;
+;;;; See the file COPYING for copyright and licensing information.
(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
@@ -70,8 +72,8 @@
finally (return (make-frame result-bindings)))
into frames
finally (return (make-environment :frames frames))))
-
-
+
+
;;; ground-term --
@@ -80,4 +82,4 @@
(apply-substitution substitution term))
-;;; end of file -- apply-substitutions.lisp --
+;;;; end of file -- apply-substitutions.lisp --
diff -rN -u old-cl-unification-1/cl-unification-lib.asd new-cl-unification-1/cl-unification-lib.asd
--- old-cl-unification-1/cl-unification-lib.asd 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/cl-unification-lib.asd 2013-07-24 22:58:32.000000000 +0000
@@ -2,6 +2,8 @@
;;;; cl-unification-lib.asd --
;;;; ASDF system file.
+;;;;
+;;;; See file COPYING for copyright and licensing information.
(asdf:defsystem :cl-unification-lib
:author "Marco Antoniotti"
diff -rN -u old-cl-unification-1/cl-unification-test.asd new-cl-unification-1/cl-unification-test.asd
--- old-cl-unification-1/cl-unification-test.asd 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/cl-unification-test.asd 2013-07-24 22:58:32.000000000 +0000
@@ -0,0 +1,31 @@
+;;;; cl-unification-test.asd
+
+
+(in-package #:asdf)
+
+;; Tests implemented using the ptester framework are run at *load* time, so
+;; we tell ASDF that loading a file containing ptester code is never done.
+;; This causes ASDF to run all the tests whenever ASDF:LOAD-SYSTEM or
+;; ASDF:TEST-SYSTEM is called with argument CL-UNIFICATION-TEST.
+
+(defclass ptester-source-file (cl-source-file)
+ ()
+ (:documentation "A Common Lisp source file containing ptester code."))
+
+(defmethod operation-done-p ((operation load-op) (component ptester-source-file))
+ nil)
+
+
+(in-package #:common-lisp-user)
+
+(defpackage #:cl-unification-test-system
+ (:use #:common-lisp #:asdf))
+
+(in-package #:cl-unification-test-system)
+
+(defsystem #:cl-unification-test
+ :depends-on (:cl-unification :ptester)
+ :components
+ ((:module "test"
+ :components
+ ((:ptester-source-file "unification-tests")))))
diff -rN -u old-cl-unification-1/cl-unification.asd new-cl-unification-1/cl-unification.asd
--- old-cl-unification-1/cl-unification.asd 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/cl-unification.asd 2013-07-24 22:58:32.000000000 +0000
@@ -1,40 +1,56 @@
;;;; -*- Mode: Lisp -*-
-
;;;; cl-unification.asd --
;;;; ASDF system file.
-;;;;===========================================================================
-;;;; Simple stuff that should be built in ASDF.
+;;;; See file COPYING for copyright licensing information.
(defpackage "CL-UNIFICATION-SYSTEM" (:use "CL" "ASDF"))
(in-package "CL-UNIFICATION-SYSTEM")
-(defclass asdf-system-definition-file (asdf:cl-source-file) ())
-(defmethod source-file-type ((c asdf-system-definition-file) (s module)) "asd")
+(when (asdf:find-system 'asdf-system-connections nil)
+ (asdf:oos 'asdf:load-op 'asdf-system-connections))
+(defclass load-only-file (cl-source-file)
+ ((last-loaded :accessor load-date :initform nil)))
+(defmethod operation-done-p ((op compile-op) (component load-only-file))
+ t)
+(defmethod perform :around ((op compile-op) (component load-only-file))
+ nil)
+(defmethod operation-done-p ((op load-op) (component load-only-file))
+ (and (load-date component)
+ (>= (load-date component) (file-write-date (component-pathname component)))))
+(defmethod perform ((op load-op) (component load-only-file))
+ (prog1 (load (component-pathname component))
+ (setf (load-date component)
+ (file-write-date (component-pathname component)))))
(asdf:defsystem :cl-unification
:author "Marco Antoniotti"
+ :in-order-to ((test-op (test-op :cl-unification-test)))
:serial t
:components ((:file "unification-package")
(:file "variables")
(:file "substitutions")
(:file "lambda-list-parsing")
(:file "templates-hierarchy")
+ (:file "template-reader")
(:file "unifier")
(:file "match-block")
- (:file "apply-substitution")
- #+asdf-with-optional-dependencies
+ (:file "apply-substitution")))
+
+#+asdf-system-connections
+(asdf:defsystem-connection cl-unification+cl-ppcre
+ :requires (:cl-ppcre :cl-unification)
+ :components ((:load-only-file "unification-package")
+ (:module "lib-dependent"
+ :components ((:file "cl-ppcre-template")))))
+
+#+asdf-system-connections
+(asdf:defsystem-connection cl-unification+named-readtables
+ :requires (:cl-unification :named-readtables)
+ :components ((:load-only-file "unification-package")
(:module "lib-dependent"
- :pathname "lib-dependent"
- :depends-on ("templates-hierarchy" "unifier")
- :components ((:file "cl-ppcre-template"
- :depends-on (cl-ppcre))
- ))
- #-asdf-with-optional-dependencies
- (asdf-system-definition-file
- "cl-unification-lib")
- ))
+ :components ((:file "named-readtable")))))
;;;; end of file -- cl-unification.asd --
diff -rN -u old-cl-unification-1/cl-unification.system new-cl-unification-1/cl-unification.system
--- old-cl-unification-1/cl-unification.system 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/cl-unification.system 2013-07-24 22:58:32.000000000 +0000
@@ -3,6 +3,8 @@
;;;; cl-unification.system --
;;;; MK:DEFSYSTEM system file.
+;;;; See file COPYING for copyright licensing information.
+
(mk:defsystem "CL-UNIFICATION"
:source-extension "lisp"
:components ("unification-package"
@@ -20,5 +22,5 @@
)
))
))
-
+
;;; end of file -- cl-unification.system --
diff -rN -u old-cl-unification-1/docs/html/control-flow.html new-cl-unification-1/docs/html/control-flow.html
--- old-cl-unification-1/docs/html/control-flow.html 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/docs/html/control-flow.html 2013-07-24 22:58:32.000000000 +0000
@@ -68,7 +68,7 @@
(defun factorial (x)
(match-case (x)
(0 1)
- (#T(number ?n) (factorial (1- ?n)))
+ (#T(number ?n) (* ?n (factorial (1- ?n))))
(otherwise (error "Incorrect match for ~S." x))))
@@ -41,13 +41,11 @@
completely tested and it is bound to contain errors and omissions.
This documentation may contain errors and omissions as well.
-
Finally, the license under which the code is released is not
- settled yet, although the file COPYING contains a
- Berkeley-style license. For the time being you are advised to use
- the code at your own risk. No warranty whatsoever is provided, the
- author will not be held responsible for any effect generated by your
- use of the library, and you can put here the scarier extra
- disclaimer you can think of.
+
The file COPYING contains a Berkeley-style license. You
+ are advised to use the code at your own risk. No warranty
+ whatsoever is provided, the author will not be held responsible for
+ any effect generated by your use of the library, and you can put
+ here the scarier extra disclaimer you can think of.
- DISCLAIMER: The code associated to these documents is not
- completely tested and it is bound to contain errors and omissions.
- This documentation may contain errors and omissions as well.
-
-
Finally, the license under which the code is released is not
- settled yet, although the file COPYING contains a
- Berkeley-style license. For the time being you are advised to use
- the code at your own risk. No warranty whatsoever is provided, the
- author will not be held responsible for any effect generated by your
- use of the library, and you can put here the scarier extra
- disclaimer you can think of.
-
-
-
-
The notion of unification originated in the field of
formal logic (e.g. [R65],) and has been used
extensively in Computer Science and Programming Languages. Most
@@ -304,10 +286,29 @@
[R56] J. A. Robinson, A machine-oriented logic based on the
resolution principle, Journal of the ACM, Vol. 12, No. 1,
January 1965, Pages 23--49.
+
+
+
+
+
+
+ DISCLAIMER: The code associated to these documents is not
+ completely tested and it is bound to contain errors and omissions.
+ This documentation may contain errors and omissions as well.
+
+
The file COPYING contains a Berkeley-style license. You
+ are advised to use the code at your own risk. No warranty
+ whatsoever is provided, the author will not be held responsible for
+ any effect generated by your use of the library, and you can put
+ here the scarier extra disclaimer you can think of.
+
Two strings unify only is they are "equal", under the following
- condition. If the variable *UNIFY-STRING-CASE-INSENSITIVE-P* is NIL
+ condition. If the variable *UNIFY-STRING-CASE-SENSITIVE-P* is T
(the default) then the two strings s1 and s2 are
compared using STRING=, otherwise they are compared using STRING-EQUAL.
The value of *UNIFY-STRING-CASE-INSENSITIVE-P* controls the
+
The value of *UNIFY-STRING-CASE-SENSITIVE-P* controls the
behavior of the UNIFY method with signature (stringstring).
- If NIL (the default), the method will use STRING= to test for
+ If T (the default), the method will use STRING= to test for
equality of the two strings. Otherwise, the UNIFY method will use STRING-EQUAL.
Affected By:
diff -rN -u old-cl-unification-1/lambda-list-parsing.lisp new-cl-unification-1/lambda-list-parsing.lisp
--- old-cl-unification-1/lambda-list-parsing.lisp 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/lambda-list-parsing.lisp 2013-07-24 22:58:32.000000000 +0000
@@ -2,6 +2,8 @@
;;; lambda-list-parsing.lisp --
+;;;; See file COPYING for copyright licensing information.
+
(in-package "UNIFY")
@@ -49,7 +51,7 @@
)
;;; The next function is really implementation-dependent, give the
-;;; definition of LAMBDA-LIST-KEYWORDS
+;;; definition of LAMBDA-LIST-KEYWORDS.
(define-condition lambda-list-parsing-error (program-error)
@@ -90,7 +92,7 @@
(&aux (parse-auxiliary-arguments (rest lambda-list)))
(&rest (parse-rest-arguments (rest lambda-list)))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -112,7 +114,7 @@
(&aux (parse-auxiliary-arguments (rest lambda-list)))
(&rest (parse-rest-arguments (rest lambda-list)))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -139,7 +141,7 @@
(error 'lambda-list-parsing-error :item head))
(skip-until-next-lambda-list-keyword (rest lambda-list)))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -165,7 +167,7 @@
(&aux (parse-auxiliary-arguments (rest lambda-list)))
(&rest (error 'lambda-list-parsing-error :item head))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -187,7 +189,7 @@
(&aux (error 'lambda-list-parsing-error :item head))
(&rest (error 'lambda-list-parsing-error :item head))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -210,7 +212,7 @@
(&aux (parse-auxiliary-arguments (rest lambda-list)))
(&rest (parse-rest-arguments (rest lambda-list)))
(otherwise
- (warn "Keyword ~A is implementation dependent.~@
+ (warn "Keyword ~A is implementation dependent.~@
The parsing may not work properly."
head)
(skip-until-next-lambda-list-keyword (rest lambda-list))
@@ -277,7 +279,7 @@
(symbol (make-key-lambda-var-info :name var
:type init-value-type
:default-value init-value))
-
+
(cons (destructuring-bind (kwd var)
var
(etypecase var
diff -rN -u old-cl-unification-1/lib-dependent/cl-ppcre-template.lisp new-cl-unification-1/lib-dependent/cl-ppcre-template.lisp
--- old-cl-unification-1/lib-dependent/cl-ppcre-template.lisp 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/lib-dependent/cl-ppcre-template.lisp 2013-07-24 22:58:32.000000000 +0000
@@ -144,6 +144,6 @@
&optional (env (make-empty-environment))
&key (start 0) end &allow-other-keys)
(unify re-t s env :start start :end end))
-
+
;;;; end of file -- cl-ppcre-template.lisp --
diff -rN -u old-cl-unification-1/lib-dependent/named-readtable.lisp new-cl-unification-1/lib-dependent/named-readtable.lisp
--- old-cl-unification-1/lib-dependent/named-readtable.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/lib-dependent/named-readtable.lisp 2013-07-24 22:58:32.000000000 +0000
@@ -0,0 +1,6 @@
+;;;; Set up a named-readtable
+(in-package "CL.EXT.DACF.UNIFICATION")
+
+(named-readtables:defreadtable template-readtable
+ (:dispatch-macro-char #\# #\t #'|sharp-T-reader|)
+ (:merge :common-lisp))
diff -rN -u old-cl-unification-1/match-block.lisp new-cl-unification-1/match-block.lisp
--- old-cl-unification-1/match-block.lisp 2013-07-24 22:58:32.000000000 +0000
+++ new-cl-unification-1/match-block.lisp 2013-07-24 22:58:32.000000000 +0000
@@ -1,4 +1,9 @@
-;;; -*- Mode: Lisp -*-
+;;;; -*- Mode: Lisp -*-
+
+;;;; match-block.lisp --
+;;;; Various macros built on top of the unifier: MATCH, MATCHING and MATCH-CASE.
+
+;;;; See file COPYING for copyright licensing information.
(in-package "UNIFY")
@@ -7,60 +12,215 @@
(intern (subseq (symbol-name v) 1)
(symbol-package v)))
+(defmacro with-unification-variables ((&rest variables) environment &body body)
+ "Execute body with variables bound to their values in environment."
+ (flet ((variable-bindings (v)
+ `((,v (find-variable-value ',v ,environment))
+ (,(clean-unify-var-name v) ,v))))
+ `(let* ,(mapcan #'variable-bindings variables)
+ (declare (ignorable ,@(mapcar #'clean-unify-var-name variables)))
+ ,@body)))
+
+(defun %match-expander (template-munger clause-munger clauses
+ &key default named environment errorp error-form keyform)
+ "A rather hairy internal function which handles expansion for all the MATCH* macros.
+
+template-munger should be either 'match or 'matchf, and will massage the
+template into the proper form for that macro set.
+
+clause-munger should be either 'cond, 'case, or 'nil. This affects the expected
+syntax of items in clauses as follows:
+ 'cond: { ((