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. diff -rN -u old-cl-unification-1/ACKNOWLEDGEMENTS new-cl-unification-1/ACKNOWLEDGEMENTS --- old-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-24 23:00:47.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 23:00:47.000000000 +0000 +++ new-cl-unification-1/COPYING 2013-07-24 23:00:47.000000000 +0000 @@ -1,4 +1,4 @@ -Copyright (c) 2004-2008 Marco Antoniotti +Copyright (c) 2004-2012 Marco Antoniotti All rights reserved. Permission is hereby granted, without written agreement and without diff -rN -u old-cl-unification-1/ChangeLog new-cl-unification-1/ChangeLog --- old-cl-unification-1/ChangeLog 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/ChangeLog 2013-07-24 23:00:47.000000000 +0000 @@ -1,3 +1,285 @@ +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. + + * 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-04-18 author + + * ChangeLog: ChangeLog updated. + + * cl-unification.system, cl-unification.asd: + System definitions files (.asd and .system) modified in order to make + dependency form CL-PPCRE optional. + + * lib-dependent/cl-ppcre-template.system: File added. + + * lib-dependent/cl-ppcre-template.lisp: + Removed REQUIRE of CL-PPCRE. Too brittle. + + * cl-unification-lib.asd: File added. + +2009-04-18 author + + * cl-unification.system, cl-unification.asd: + System definitions files (.asd and .system) modified in order to make + dependency form CL-PPCRE optional. + + * lib-dependent/cl-ppcre-template.system: File added. + + * lib-dependent/cl-ppcre-template.lisp: + Removed REQUIRE of CL-PPCRE. Too brittle. + + * cl-unification-lib.asd: File added. + +2009-04-17 author + + * unification-package.lisp: + 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). + + * apply-substitution.lisp: + 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. + +2009-04-15 author + + * ChangeLog: ChangeLog updated. + + * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp: + 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. + + * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE. + + * substitutions.lisp: + Added some functionality to extract all variables and/or all values + from an environment or a frame. + + * match-block.lisp: + Added MATCHF (whose name may change) to simplify the + 'destructuring-bind'-like syntax and behavior of the matching + facilities. + + * COPYING: Dates updated. + + * unifier.lisp: + 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. + + * variables.lisp: Some 'diff' unfathomable change happened. + + * unification-package.lisp: Added exports of a few symbols. + + * cl-unification.system, cl-unification.asd: + Fixed a few snags and added "lib-dependent" module. + + * apply-substitution.lisp: Added some functionality and comments. + +2009-04-15 author + + * lib-dependent/cl-ppcre-template.lisp, test/unification-tests.lisp: + 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. + + * templates-hierarchy.lisp: Added LAMBDA-TEMPLATE. + + * substitutions.lisp: + Added some functionality to extract all variables and/or all values + from an environment or a frame. + + * match-block.lisp: + Added MATCHF (whose name may change) to simplify the + 'destructuring-bind'-like syntax and behavior of the matching + facilities. + + * COPYING: Dates updated. + + * unifier.lisp: + 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. + + * variables.lisp: Some 'diff' unfathomable change happened. + + * unification-package.lisp: Added exports of a few symbols. + + * cl-unification.system, cl-unification.asd: + Fixed a few snags and added "lib-dependent" module. + + * apply-substitution.lisp: Added some functionality and comments. + +2008-07-13 author + + * ChangeLog: Changelog updated. + + * ACKNOWLEDGEMENTS: + Added credits to a few people. Missing ones should bug the maintainer :) + + * README: Copyright dates updated. + + * unification.asd, unification.system: Cleaning up. + Committing in . + + Removed Files: + unification.asd unification.system + + * templates-hierarchy-saved.lisp: Clenaing up. + Committing in . + + Removed Files: + templates-hierarchy-saved.lisp + + * INSTALLATION: Instructions updated. + + * COPYING: Copyright dates updated. + + * test/unification-tests.lisp: Added file. + + * substitutions.lisp, templates-hierarchy.lisp, unification-package.lisp, variables.lisp: + 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 + + * cl-unification.system: + Added explicit :source-extension to accomodate Allegro CL. + 2008-07-13 author * ACKNOWLEDGEMENTS: diff -rN -u old-cl-unification-1/README new-cl-unification-1/README --- old-cl-unification-1/README 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/README 2013-07-24 23:00:47.000000000 +0000 @@ -1,6 +1,6 @@ CL-UNIFICATION -Marco Antoniotti (c) 2004-2008 +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 23:00:47.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 23:00:47.000000000 +0000 +++ new-cl-unification-1/apply-substitution.lisp 2013-07-24 23:00:47.000000000 +0000 @@ -1,38 +1,85 @@ -;;; -*- 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. ;;;--------------------------------------------------------------------------- ;;; Substitution application. -(defgeneric apply-substitution (substitution item)) +;;; apply-substitution -- +;;; +;;; EXCLUDE-VARS are variables that will just pass through (a list for +;;; the time being). +(defgeneric apply-substitution (substitution item &optional exclude-vars)) -(defmethod apply-substitution ((substitution environment) (s symbol)) + +(defmethod apply-substitution ((s environment) (n number) &optional exclude-vars) + (declare (ignore exclude-vars)) + n) + + +(defmethod apply-substitution ((substitution environment) (s symbol) + &optional (exclude-vars ())) + (declare (type list exclude-vars)) (cond ((variable-any-p s) s) ((variablep s) - (multiple-value-bind (val foundp) - (find-variable-value s substitution) - (cond (foundp val) - (t (warn "~S is a free variable in the current environment." - s) - s)))) + (if (member s exclude-vars :test #'eq) + s + (multiple-value-bind (val foundp) + (find-variable-value s substitution) + (cond (foundp (apply-substitution substitution val exclude-vars)) + (t (warn "~S is a free variable in the current environment." + s) + s)))) + ) (t s))) -(defmethod apply-substitution ((substitution environment) (l cons)) - (cons (apply-substitution substitution (first l)) - (apply-substitution substitution (rest l)))) +(defmethod apply-substitution ((substitution environment) (l cons) + &optional (exclude-vars ())) + (declare (type list exclude-vars)) + (cons (apply-substitution substitution (first l) exclude-vars) + (apply-substitution substitution (rest l) exclude-vars))) -(defmethod apply-substitution ((substitution environment) (l null)) + +(defmethod apply-substitution ((substitution environment) (l null) + &optional exclude-vars) + (declare (ignore exclude-vars)) '()) + +;;; compose-substitions -- +;;; The definition is a direct translation of TPL's definition at page 318. +;;; Usually these are done by directly composing and currying +;;; functions in ML/Haskell derivatives, but that is just being "lazy". +;;; The current definition may be too "eager", but the "correct" +;;; semantics should be preserved. + +(defun compose-substitutions (env2 env1) ; note the order. + (declare (type environment env2 env1)) + + (loop for env1-frame in (environment-frames env1) + collect + (loop for (var . term) in (frame-bindings env1-frame) + collect (make-binding var (apply-substitution env2 term)) + into result-bindings + finally (return (make-frame result-bindings))) + into frames + finally (return (make-environment :frames frames)))) + + + + +;;; ground-term -- + (defun ground-term (term &optional (substitution (make-empty-environment))) (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 23:00:47.000000000 +0000 +++ new-cl-unification-1/cl-unification-lib.asd 2013-07-24 23:00:47.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 23:00:47.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 23:00:47.000000000 +0000 +++ new-cl-unification-1/cl-unification.asd 2013-07-24 23:00:47.000000000 +0000 @@ -1,18 +1,56 @@ ;;;; -*- Mode: Lisp -*- - ;;;; cl-unification.asd -- ;;;; ASDF system file. -(asdf:defsystem cl-unification - :author "Marco Antoniotti" - :serial t - :components ((:file "unification-package") - (:file "variables") - (:file "substitutions") - (:file "lambda-list-parsing") - (:file "templates-hierarchy") - (:file "unifier") - (:file "match-block") - (:file "apply-substitution"))) +;;;; See file COPYING for copyright licensing information. + +(defpackage "CL-UNIFICATION-SYSTEM" (:use "CL" "ASDF")) + +(in-package "CL-UNIFICATION-SYSTEM") + +(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-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" + :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 23:00:47.000000000 +0000 +++ new-cl-unification-1/cl-unification.system 2013-07-24 23:00:47.000000000 +0000 @@ -3,15 +3,24 @@ ;;;; cl-unification.system -- ;;;; MK:DEFSYSTEM system file. +;;;; See file COPYING for copyright licensing information. + (mk:defsystem "CL-UNIFICATION" - :source-extension "lisp" - :components ("unification-package" - "variables" - "substitutions" - "lambda-list-parsing" - "templates-hierarchy" - "unifier" - "match-block" - "apply-substitution")) - + :source-extension "lisp" + :components ("unification-package" + "variables" + "substitutions" + "lambda-list-parsing" + "templates-hierarchy" + "unifier" + "match-block" + "apply-substitution" + (:module "lib-dependent" + :depends-on ("templates-hierarchy" "unifier") + :components ((:subsystem "cl-ppcre-template" + :non-required-p t + ) + )) + )) + ;;; 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 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/control-flow.html 2013-07-24 23:00:47.000000000 +0000 @@ -208,7 +208,7 @@
-

News

+ +
@@ -233,7 +234,7 @@ diff -rN -u old-cl-unification-1/docs/html/dictionary.html new-cl-unification-1/docs/html/dictionary.html --- old-cl-unification-1/docs/html/dictionary.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/dictionary.html 2013-07-24 23:00:47.000000000 +0000 @@ -279,7 +279,7 @@ @@ -339,7 +339,7 @@ diff -rN -u old-cl-unification-1/docs/html/downloads.html new-cl-unification-1/docs/html/downloads.html --- old-cl-unification-1/docs/html/downloads.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/downloads.html 2013-07-24 23:00:47.000000000 +0000 @@ -97,7 +97,7 @@
-

News

+
@@ -124,7 +124,7 @@ diff -rN -u old-cl-unification-1/docs/html/index.html new-cl-unification-1/docs/html/index.html --- old-cl-unification-1/docs/html/index.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/index.html 2013-07-24 23:00:47.000000000 +0000 @@ -308,7 +308,7 @@ + @@ -109,7 +110,7 @@ diff -rN -u old-cl-unification-1/docs/html/mailing-lists.html new-cl-unification-1/docs/html/mailing-lists.html --- old-cl-unification-1/docs/html/mailing-lists.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/mailing-lists.html 2013-07-24 23:00:47.000000000 +0000 @@ -55,7 +55,7 @@ @@ -117,7 +117,7 @@ diff -rN -u old-cl-unification-1/docs/html/string-template-class.html new-cl-unification-1/docs/html/string-template-class.html --- old-cl-unification-1/docs/html/string-template-class.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/string-template-class.html 2013-07-24 23:00:47.000000000 +0000 @@ -122,7 +122,7 @@

Affected By:

-

The value of the variable *UNIFY-STRING-CASE-INSENSITIVE-P*.

+

The value of the variable *UNIFY-STRING-CASE-SENSITIVE-P*.

Exceptional Situations:

diff -rN -u old-cl-unification-1/docs/html/templates.html new-cl-unification-1/docs/html/templates.html --- old-cl-unification-1/docs/html/templates.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/templates.html 2013-07-24 23:00:47.000000000 +0000 @@ -173,7 +173,7 @@
-

News

+
@@ -198,7 +198,7 @@ diff -rN -u old-cl-unification-1/docs/html/unification-dictionary.html new-cl-unification-1/docs/html/unification-dictionary.html --- old-cl-unification-1/docs/html/unification-dictionary.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/unification-dictionary.html 2013-07-24 23:00:47.000000000 +0000 @@ -38,7 +38,7 @@
  • Package CL.EXT.DACF.UNIFICATION
  • Generic function UNIFY -
  • Variable *UNIFY-STRING-CASE-INSENSITIVE* +
  • Variable *UNIFY-STRING-CASE-SENSITIVE*
  • Class TEMPLATE
  • Class EXPRESSION-TEMPLATE @@ -106,7 +106,7 @@
    -

    News

    +
    @@ -133,7 +133,7 @@ diff -rN -u old-cl-unification-1/docs/html/unify-function.html new-cl-unification-1/docs/html/unify-function.html --- old-cl-unification-1/docs/html/unify-function.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/unify-function.html 2013-07-24 23:00:47.000000000 +0000 @@ -163,7 +163,7 @@

    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.

    @@ -335,7 +335,7 @@

    See Also:

    MAKE-EMPTY-ENVIRONMENT, UNIFICATION-FAILURE, - *UNIFY-STRING-CASE-INSENSITIVE-P*, OCCURS-IN-P, + *UNIFY-STRING-CASE-SENSITIVE-P*, OCCURS-IN-P, *OCCURENCE-CHECK-P*.

    Notes:

    diff -rN -u old-cl-unification-1/docs/html/unifying-substitutions.html new-cl-unification-1/docs/html/unifying-substitutions.html --- old-cl-unification-1/docs/html/unifying-substitutions.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/unifying-substitutions.html 2013-07-24 23:00:47.000000000 +0000 @@ -162,7 +162,7 @@
    -

    News

    +
    @@ -187,7 +187,7 @@ diff -rN -u old-cl-unification-1/docs/html/usci-variable.html new-cl-unification-1/docs/html/usci-variable.html --- old-cl-unification-1/docs/html/usci-variable.html 2013-07-24 23:00:47.000000000 +0000 +++ new-cl-unification-1/docs/html/usci-variable.html 2013-07-24 23:00:47.000000000 +0000 @@ -1,6 +1,6 @@ - CL Unification: Variable *UNIFY-STRING-CASE-INSENSITIVE-P* + CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P* @@ -11,7 +11,7 @@
    - CL Unification: Variable *UNIFY-STRING-CASE-INSENSITIVE-P* + CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P*