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 ~@<newline> 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, #<unification-failure> ;; 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.
Thu Apr 21 15:33:20 UTC 2005 mantoniotti
* Fixed, but not completed, the page.
Fri Jan 28 19:46:37 UTC 2005 mantoniotti
* Added file `downloads.html'.
Fri Jan 28 19:45:40 UTC 2005 mantoniotti
* Minor changes to text. Fixed `download.html' link.
Fri Jan 28 19:30:35 UTC 2005 mantoniotti
* Fixed minor problem in Lambda List parsing.
Fixed minor problem in Lambda List parsing.
Also VALID-TEMPLATE-P was expanded, and it looks like it should become
a generic function.
Wed Nov 17 22:19:54 UTC 2004 mantoniotti
* Initial revision
diff -rN -u old-cl-unification-1/ACKNOWLEDGEMENTS new-cl-unification-1/ACKNOWLEDGEMENTS
--- old-cl-unification-1/ACKNOWLEDGEMENTS 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/ACKNOWLEDGEMENTS 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,15 @@
+A lot of pleple deserved thanks for improving CL-UNIFICATION.
+
+The Lisp NYC group has endured presentations of this code and provided
+feedback.
+
+The following individuals have provided feedback and (precious) bug
+fixes.
+
+Boldyrev, Ivan
+Brown, Robert
+Korablin, Vladimir V.
+Leuner, John
+McManus, Russell
+Scott, Peter
+Werner, Norman
diff -rN -u old-cl-unification-1/COPYING new-cl-unification-1/COPYING
--- old-cl-unification-1/COPYING 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/COPYING 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2012 Marco Antoniotti
+All rights reserved.
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in all
+copies of this software.
+
+IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
+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, 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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/ChangeLog 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,602 @@
+2011-03-28 Robert Brown <robert.brown at gmail.com>
+
+ * 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 <author at paniscia.local>
+
+ * .cvsignore: Updated.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable:
+ Removed Files:
+ Thumbs.db Thumbs.db:encryptable
+
+2011-02-26 author <author at paniscia.local>
+
+ * .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 <author at paniscia.local>
+
+ * 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 ~@<newline> 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 <robert.brown at gmail.com>
+
+ * lambda-list-parsing.lisp: Delete trailing whitespace that turned
+ ~@<newline> into a bogus format directive by converting it into
+ ~@<space><newline>
+
+ * 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 <robert.brown at gmail.com>
+
+ * unifier.lisp: Allow vectors to unify with sequence templates.
+ * test/unification-tests.lisp: new test to verify the change
+
+2011-02-16 Robert Brown <robert.brown at gmail.com>
+
+ * cl-unification.asd: Add support for asdf:test-system.
+
+ * cl-unification-test.asd: File added.
+
+2011-01-18 author <author at paniscia.local>
+
+ * 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 <author at paniscia.local>
+
+ * 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 <author@paniscia.local>
+
+ * 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 <author@paniscia.local>
+
+ * 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 <author@Macintosh-9.local>
+
+ * 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 <author@Macintosh-9.local>
+
+ * 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 <author@Macintosh-9.local>
+
+ * 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 <author@paniscia.pd.disco.unimib.it>
+
+ * 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 <author@paniscia.pd.disco.unimib.it>
+
+ * 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 <author@Macintosh.local>
+
+ * 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: Cleaning 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-10 author <author@Macintosh.local>
+
+ * apply-substitution.lisp:
+ Removed EXPORT of APPLY-SUBSTITUTION as it is already in the DEFPACKAGE.
+
+2007-11-09 author <author@Macintosh.local>
+
+ * docs/html/index.html: Changed the position of the disclaimer.
+
+ * ChangeLog: ChangeLog updated.
+
+ * match-block.lisp:
+ 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.
+
+ * substitutions.lisp:
+ Changed the top comment and added a (:copier nil) option to the
+ ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the
+ file.
+
+ * cl-unification.system, cl-unification.asd:
+ Added the new system building files with more meaningful names
+ w.r.t. the name of the library.
+
+ * unification.asd, unification.system:
+ Marked the two system building files as 'obsolete', before removing
+ them from the repository. The new files are prefixed by 'cl-'.
+
+2007-11-09 author <author@papadopoulou-2.ydras.offices.>
+
+ * match-block.lisp:
+ 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.
+
+ * substitutions.lisp:
+ Changed the top comment and added a (:copier nil) option to the
+ ENVIRONMENT defstruct, as COPY-ENVIRONMENT is defined later in the
+ file.
+
+ * cl-unification.system, cl-unification.asd:
+ Added the new system building files with more meaningful names
+ w.r.t. the name of the library.
+
+ * unification.asd, unification.system:
+ Marked the two system building files as 'obsolete', before removing
+ them from the repository. The new files are prefixed by 'cl-'.
+
+2007-05-21 author <author@papadopoulou-2.ydras.offices.>
+
+ * ChangeLog: ChangeLog updated.
+
+ * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION:
+ Updated copyrights dates and changed a few instructions in the
+ INSTALLATION file.
+
+ * docs/html/index.html: Updated copyrights dates.
+
+ * ChangeLog: ChangeLog updated.
+
+ * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp:
+ See previous message.
+
+ * unification.system:
+ 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.
+
+2007-05-21 author <author@Paniscia-di-Marco-Antoniotti.local>
+
+ * README, ACKNOWLEDGEMENTS, COPYING, INSTALLATION:
+ Updated copyrights dates and changed a few instructions in the
+ INSTALLATION file.
+
+ * docs/html/index.html: Updated copyrights dates.
+
+ * ChangeLog: ChangeLog updated.
+
+ * unification-package.lisp, unification.asd, apply-substitution.lisp, match-block.lisp, substitutions.lisp:
+ See previous message.
+
+ * unification.system:
+ 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.
+
+2007-05-21 author <author@paniscia.disco.unimib.it>
+
+ * unification.system:
+ 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.
+
+2006-07-19 author <author@paniscia.disco.unimib.it>
+
+ * templates-hierarchy.lisp, unifier.lisp:
+ 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
+
+ * unification-package.lisp: Added missing export.
+
+2005-10-25 author <author@paniscia.disco.unimib.it>
+
+ * unifier.lisp: 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.
+
+ * match-block.lisp:
+ Fixed problem with checking the presence of T and OTHERWISE clauses in
+ MATCHING.
+
+2005-07-25 author <author@paniscia.disco.unimib.it>
+
+ * docs/html/downloads.html: Minor cleanup.
+
+2005-05-20 author <author@paniscia.disco.unimib.it>
+
+ * docs/html/links.html: Fixed typos.
+
+ * docs/html/nil-template-class.html: Fixed bug in documentation.
+
+ * docs/html/links.html: Page updated.
+
+ * docs/html/unification-dictionary.html: Incremental change to page.
+
+ * docs/html/number-template-class.html: Fixed a documentation bug.
+ Thanks to Norman Werner for spotting it.
+
+ * docs/html/index.html: Added link to "Mailing Lists" page.
+
+ * docs/html/mailing-lists.html: File added.
+
+ * unifier.lisp:
+ 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.
+
+2005-05-19 author <author@paniscia.disco.unimib.it>
+
+ * README: Year updated.
+
+ * ACKNOWLEDGEMENTS: File added.
+
+ * ChangeLog: ChangeLog updated.
+
+ * COPYING: Updated copyright notice.
+
+ * docs/html/downloads.html, docs/html/index.html:
+ Changed the DISCLAIMER parts in the files, in order to clarify the licensing
+ of the code.
+
+2005-05-19 mantoniotti <mantoniotti@vault>
+
+ * COPYING: Updated copyright notice.
+
+ * docs/html/downloads.html, docs/html/index.html:
+ Changed the DISCLAIMER parts in the files, in order to clarify the licensing
+ of the code.
+
+2005-04-27 mantoniotti <mantoniotti@vault>
+
+ * docs/html/control-flow.html: Fixed factorial example.
+
+ * match-block.lisp:
+ Added IGNORABLE declaration to MATCH macro expansion.
+ This is useful in quieting various compilers.
+
+ * match-block.lisp: Added acknowledgement to Peter Scott.
+
+ * match-block.lisp: Fixed bug in condition signaling within MATCH-CASE.
+
+ * templates-hierarchy.lisp:
+ 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.
+
+ * match-block.lisp:
+ Added MATCH-CASE macro. Slightly modified from the version provided
+ by Peter Scott.
+
+ * unification.asd: Added unification.asd file.
+
+2005-04-21 mantoniotti <mantoniotti@vault>
+
+ * docs/html/links.html: Fixed, but not completed, the page.
+
+2005-01-28 mantoniotti <mantoniotti@vault>
+
+ * docs/html/downloads.html: Added file `downloads.html'.
+
+ * docs/html/index.html:
+ Minor changes to text. Fixed `download.html' link.
+
+ * lambda-list-parsing.lisp, unifier.lisp:
+ Fixed minor problem in Lambda List parsing.
+ Also VALID-TEMPLATE-P was expanded, and it looks like it should become
+ a generic function.
+
+2004-11-17 mantoniotti <mantoniotti@vault>
+
+ * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps:
+ Initial import.
+
+ * docs/html/images/unif-templ-hier.pcl, docs/html/images/unif-templ-hier.ps:
+ New file.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html:
+ Initial import.
+
+ * docs/html/images/Thumbs.db, docs/html/images/Thumbs.db:encryptable, docs/html/images/header_bg.gif, docs/html/images/header_bg_1.gif, docs/html/images/shim.gif, docs/html/images/unif-templ-hier.gif, docs/html/images/unif-templ-hier.pdf, docs/html/images/unif-templ-hier.sxd, docs/html/make-shared-environment-function.html, docs/html/match-case-macro.html, docs/html/standard-object-template-class.html, docs/html/string-template-class.html, docs/html/structure-object-template-class.html, docs/html/subseq-template-class.html:
+ New file.
+
+ * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp:
+ Initial import.
+
+ * docs/html/.DS_Store, docs/html/aref-template-class.html, docs/html/array-template-class.html, docs/html/control-flow.html, docs/html/dictionary.html, docs/html/element-template-class.html, docs/html/elt-template-class.html, docs/html/expression-template-class.html, docs/html/find-variable-value-function.html, docs/html/hash-t-read-macro.html, docs/html/index.html, docs/html/links.html, docs/html/list-template-class.html, docs/html/main.css, docs/html/make-empty-environment-function.html, docs/html/match-macro.html, docs/html/matching-macro.html, docs/html/nil-template-class.html, docs/html/nth-template-class.html, docs/html/nthcdr-template-class.html, docs/html/number-template-class.html, docs/html/sequence-template-class.html, docs/html/symbol-template-class.html, docs/html/template-class.html, docs/html/template-p-function.html, docs/html/template-spec-accessor.html, docs/html/templates.html, docs/html/type-template-class.html, docs/html/unification-dictionary.html, docs/html/unify-function.html, docs/html/unify-package.html, docs/html/unifying-substitutions.html, docs/html/usci-variable.html, docs/html/vector-template-class.html, unification-package.lisp, unification.system, unifier.lisp, variables.lisp:
+ New file.
+
+ * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp:
+ Initial import.
+
+ * COPYING, INSTALLATION, README, lambda-list-parsing.lisp, match-block.lisp, substitutions.lisp, templates-hierarchy-saved.lisp, templates-hierarchy.lisp:
+ New file.
+
diff -rN -u old-cl-unification-1/INSTALLATION new-cl-unification-1/INSTALLATION
--- old-cl-unification-1/INSTALLATION 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/INSTALLATION 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,32 @@
+CL-UNIFICATION INSTALLATION
+
+The package comes with a MK:DEFSYSTEM definition:
+"unification.system".
+
+Issuing
+
+ (mk:load-system "CL-UNIFICATION")
+
+or
+
+ (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 "CL-UNIFICATION")
+
+provided that the package is unpacked in an ASDF-INSTALL known
+directory.
+
+Enjoy
diff -rN -u old-cl-unification-1/README new-cl-unification-1/README
--- old-cl-unification-1/README 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/README 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,12 @@
+CL-UNIFICATION
+
+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.
+
+The package is a full-blown library to "unify" arbitrary CL objects
+while constructing bindings for placeholders (unification variables)
+in a "template" sublanguage.
+
+Enjoy.
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-04 18:11:12.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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/apply-substitution.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,85 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; 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.
+
+;;; 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 ((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)
+ (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)
+ &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)
+ &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 --
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/cl-unification-lib.asd 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,14 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-unification-lib.asd --
+;;;; ASDF system file.
+;;;;
+;;;; See file COPYING for copyright and licensing information.
+
+(asdf:defsystem :cl-unification-lib
+ :author "Marco Antoniotti"
+ :components ((:module "lib-dependent"
+ :components ((:file "cl-ppcre-template"))))
+ :depends-on (cl-ppcre cl-unification))
+
+;;;; end of file -- cl-unification-lib.asd --
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-04 18:11:12.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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/cl-unification.asd 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,56 @@
+;;;; -*- Mode: Lisp -*-
+;;;; cl-unification.asd --
+;;;; ASDF system file.
+
+;;;; 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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/cl-unification.system 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,26 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; 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"
+ (: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/aref-template-class.html new-cl-unification-1/docs/html/aref-template-class.html
--- old-cl-unification-1/docs/html/aref-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/aref-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,206 @@
+<html>
+ <head>
+ <title>CL Unification: Class AREF-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class AREF-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>AREF-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ AREF-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The AREF-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>aref</b> (<i>index1</i> ... <i>indexN</i>) <i>item</i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>aref</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The AREF-TEMPLATE syntax denotes the <i>item</i> at
+ <i>index1</i> ... <i>indexN</i> of an ARRAY. An AREF-TEMPLATE must
+ be unified against a ARRAY object. <i>item</i> is <em>unified</em>
+ against the element extracted from the sequence object at
+ <i>index1</i> ... <i>indexN</i> by the standard function AREF.</p>
+
+ <p>The second form is a shorthand.</p>
+ <p>
+ <pre>
+ #T(<b>aref</b> <i>index</i> <i>item</i>) <==> #T(<b>aref</b> (<i>index</i>) <i>item</i>)
+ </pre>
+ </p>
+
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>aref</b> 2 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>aref</b> 42 ?x)))
+ --> Error: index 42 out of bounds.
+
+
+ cl-prompt> (setq e (unify 42 #T(<b>aref</b> 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>aref</b> 4 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #\Space
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(<b>aref</b> (1 1) ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ BAR
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo bar)) #T(<b>aref</b> (1 1) baz)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify #2A((1 0) (foo ?x)) #T(<b>aref</b> (1 1) baz)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ BAZ
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an AREF-TEMPLATE against a non-ARRAY object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/array-template-class.html new-cl-unification-1/docs/html/array-template-class.html
--- old-cl-unification-1/docs/html/array-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/array-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,227 @@
+<html>
+ <head>
+ <title>CL Unification: Class ARRAY-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ARRAY-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>ARRAY-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ VECTOR-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ARRAY-TEMPLATE class denotes those object that are used
+ to unify against an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>array</b> <i><shape-template></i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<i><<strong>CL</strong> array type specifier></i> <i><shape-template></i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>array</b> ([* | <i><<strong>CL</strong> type specifier></i>] [<i><dimension sped></i>]) <i><shape-template></i>)
+ </pre>
+ </p>
+
+ <p>Where <i><shape-template></i> can be:</p>
+
+ <p>
+ <pre>
+ <i><shape-template></i> ::= <i><sequence-template></i>
+ | <i><destructuring template lambda list></i>
+ | (<i><shape-template></i>)
+ </pre>
+ </p>
+
+
+ <p>The ARRAY-TEMPLATE syntax denotes an ARRAY object. An
+ ARRAY-TEMPLATE must be unified against an ARRAY object. The elements
+ of the array must be unified against the
+ <i><shape-template></i>. Each row of the array is unified
+ recursively against each element of the <i><shape-template></i>.
+
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>array</b> (0 1 ?x 3 4 5))))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>array</b> (0 1 "FOO" 3 4 5))))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #2A((0 1 42) (3 4 5)) #T(<b>array</b> ((0 1 ?x) (3 4 5)))))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(<b>array</b> ((_ _ ?x) (3 4 5)))))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #2A(("foo" "bar" 42) (3 4 5)) #T(<b>array</b> (#T(vector _ &rest ?x) (3 4 5)))))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #("bar" 42)
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an ARRAY-TEMPLATE against a non-ARRAY object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <h3>Syntax Note</h3>
+
+ <p>The ARRAY-TEMPLATE syntax tries to be easy to use, at the cost of
+ being overloaded. There is no actual need to have the separate
+ forms <code>(<b>array</b> (fixnum) ...)</code> and
+ <code>((<b>array</b> fixnum) ...)</code>.</p>
+
+ <p>In a future release they may be conflated. For the time being
+ they are kept separate as it is unclear which would be better to
+ provide.</p>
+
+ <h3>Elements Unification</h3>
+
+ <p>It would be nice to have the possibility to unify against
+ <em>slices</em> of the array. Alas, this seems non trivial to get
+ right, and it is left as a future extension of the semantics of
+ <i><shape-template></i>.</p>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/control-flow.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,244 @@
+<html>
+ <head>
+ <title>CL Control Flow</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: CONTROL FLOW</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Control Flow</h1>
+
+ <p>In order to make the use of the UNIFICATION library easier, a few
+ utility macros are provided. The macros MATCH, MATCHING, and
+ MATCH-CASE can be used to unify two (or more) objects and then to
+ build a lexical environment where the variables present in the to
+ objects (or templates) are bound to the values resulting from the
+ application of UNIFY.</p>
+
+ <p>
+ <ul>
+ <li>MATCH is a "single shot" macro. It does one unification and
+ executes forms in an appropriate lexical environment.</li>
+
+ <li>MATCH-CASE is equivalent to CASE. It tries to match a single
+ object (or template) against a set of clauses. The forms associated
+ to the first clause for which there is a successful unification, are
+ then executed within an appropriate lexical environment.
+
+ <li>MATCHING is equivalent to COND. Each clause contains a
+ <em>head</em consisting of two objects to be unified. The first
+ clause whose head unifies sucessfully has its associated forms
+ executed within an appropriate lexical environment.
+ </ul>
+ </p>
+
+
+ <h1>Examples</h1>
+
+ <p>These macros allow the construction of interesting <em>pattern
+ matching</em> like code.</p>
+
+ <p>
+ <pre>
+ (defun factorial (x)
+ (<b>match-case</b> (x)
+ (0 1)
+ (#T(number ?n) (* ?n (factorial (1- ?n))))
+ (otherwise (error "Incorrect match for ~S." x))))
+ </pre>
+ </p>
+
+ <p>Or consider the more interesting piece of code from a not-so
+ hypothetical Red-Black tree implementation (<em>cfr.</em> [<a
+ href="#O98">O98</a>].) The function BALANCE is the key part of the
+ rebalancing act played by Red-Black trees.</p>
+
+ <p>
+ <pre>
+ (defstruct (tree-node (:conc-name tn-)
+ (:constructor mk-tn (color left elem right)))
+ color
+ left
+ elem
+ right)
+
+ (defun balance (&rest balancing-arguments)
+ (<b>match-case</b> (balancing-arguments)
+ ((:black #T(tree-node tn-color :red
+ tn-left #T(tree-node tn-color :red
+ tn-left ?a
+ tn-elem ?x
+ tn-right ?b)
+ tn-elem ?y
+ tn-right ?c)
+ ?z
+ ?d)
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black #T(tree-node tn-color :red
+ tn-left ?a
+ tn-elem ?x
+ tn-right #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-right ?c))
+ ?z
+ ?d)
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black ?a
+ ?x
+ #T(tree-node tn-color :red
+ tn-left #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-right ?c)
+ tn-elem ?z
+ tn-right ?d))
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((:black ?a
+ ?x
+ #T(tree-node tn-color :red
+ tn-left ?b
+ tn-elem ?y
+ tn-left #T(tree-node tn-color :red
+ tn-left ?c
+ tn-elem ?z
+ tn-right ?d)))
+ (mk-tn :red (mk-tn :black ?a ?x ?b) ?y (mk-tn :black ?c ?z ?d)))
+ ((?color ?left ?elem ?right)
+ (mk-tn ?color ?left ?elem ?right))))
+ </pre>
+ </p>
+
+ <p>This version of BALANCE is more verbose than the one given in [<a
+ href="#O98">O98</a>], but it preserves the general elegance of the
+ ML implementation.</p>
+
+
+
+ <h1>Control Flow Dictionary</h1>
+
+ <ul>
+ <li><a href="match-macro.html"><i>Macro</i> <b>MATCH</b></a>
+ <li><a href="matching-macro.html"><i>Macro</i> <b>MATCHING</b></a>
+ <li><a href="match-case-macro.html"><i>Macro</i> <b>MATCH-CASE</b></a>
+ </ul>
+
+
+
+ <h1>Notes</h1>
+
+ <h2>Other Forms</h2>
+
+ <p>It would be obvious to add the macros EMATCH-CASE and
+ CMATCH-CASE, for symmetry with ECASE and CCASE. Also, MATCHING
+ could be renamed to MATCH-COND.</p>
+
+
+ <h2>Current Implementation Details</h2>
+
+ <p>The current implementations of MATCHING and MATCH-CASE do not
+ handle user supplied environments yet.</p>
+
+
+ <h2>References</h2>
+
+ <p>
+ <a name="O98">[O98]</a> C. Okasaki, <i>Purely Functional Data
+ Structures</i>, Cambridge University Press, 1998.
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Document created
+ </li>
+ </ul>
+-->
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/dictionary.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,349 @@
+<html>
+ <head>
+ <title>CL Unification Dictionary</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION Dictionary</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="index.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION Dictionary</h1>
+
+ <p>The notion of <em>unification</em> originated in the field of
+ formal logic (e.g. Robinson, 1956) and has been used extensively in
+ Computer Science and Programming Languages. <strong>Prolog</strong>
+ obviously uses the full power of unification, however, unification
+ is also at the core of <em>type checking</em> algorithms in the
+ tradition of Milner's, and a limited form - <em>pattern
+ matching</em> - is available to the user in languages of the ML and
+ Haskell family.</p>
+
+ <p>The library presented in these pages provides a full blown
+ <em>unification framework</em> for <strong>Common Lisp</strong>.</p>
+
+ <p>Writing a pattern matcher or a an unifier in <strong>Common
+ Lisp</strong> is easy, as long as we limit ourselves to manipulate
+ only ATOMs and CONSes.</p>
+
+ <p>Alas, it would be much nicer if we could manipulated arbitrary
+ <strong>Common Lisp</strong> objects as the ML programmer can with
+ arbitrary ML objects.<p>
+
+ <p>The library presented here is the first one (to the best of the
+ author's knowledge) that is capable of manipulating arbitrary
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The hope is that this library could be incorporated directly in
+ an implementation in order to provide better type checking.</p>
+
+ <p>This should not come as a surprise, as a compiler like CMUCL does
+ include a type inference engine, which does very similar things.</p>
+
+ <h2>Unification Basics</h2>
+
+ <p>The unification process makes sure that two <em>object
+ descriptions</em> containing some <em>holes</em>
+ - i.e. <em>variables</em> - can be made equal (almost in the EQUALP
+ sense) by assigning <em>consistent</em> values to the variables
+ involved.</p>
+
+ <p>Suppose we had a function U performing unification and returning
+ a set of <em>variable assignments</em>, often called a
+ <em>substitution</em>. A very simple
+ example involving the unification of two numbers could be
+ <pre>
+ <b>U</b>(42, 42) ==> {}
+ </pre>
+ The two numbers are EQL, so no variable is involved and the empty
+ substitution is returned.
+ <pre>
+ <b>U</b>(42, 123) ==> <unification failure>
+ </pre>
+ The two numbers are not EQL, so the unification fails.
+ <pre>
+ <b>U</b>(42, x) ==> {x -> 42}
+ </pre>
+ The only way to make the unification process to succeed is to bind
+ the value 42 to the variable <code>x</code>.</p>
+
+ <p>The UNIFICATION library defines all the necessary functions and a
+ <em>unification sub-language</em> to handle most of <strong>Common
+ Lisp</strong>.</p>
+
+ <h2>UNIFICATION Library</h2>
+
+ <p>The UNIFICATION library has one main entry point, the generic function
+ UNIFY, and a sub-language definition that allows us to talk about
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The UNIFY generic function has the following signature:
+ <pre>
+ <b>unify</b> <i>x</i> <i>y</i> &optional <i>substitution</i>
+ </pre>
+ Where <code><i>x</i></code> and <code><i>y</i></code> are either
+ arbitrary <strong>Common Lisp</strong> objects, <em>variables</em>,
+ or <em>object templates</em>. These items constitute the so-called
+ <em>extended terms</em> manipulated by the unification
+ machinery.</p>
+
+ <p><em>Variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <p>Hence, the above examples result in the following
+ <pre>
+ cl-prompt> (<b>unify</b> 42 42)
+ <i>#<EMPTY ENVIRONMENT xxxxxx></i>
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> 42 123)
+ ==> error: unification failure
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> 42 ?x)
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?x *)
+ <i>42</i>
+ </pre>
+ </p>
+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of
+ a variable in a substitution.</p>
+
+ <p>As a more complicated example, consider the usual CONS based
+ unification
+ <pre>
+ cl-prompt> (<b>unify</b> '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?gnao *)
+ <i>(BAR FROBBOZ)</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?baz **)
+ <i>42</i>
+ </pre>
+
+ <p>Of course note the following behavior
+ <pre>
+ cl-prompt> (<b>unify</b> '(foo ?x 42) '(foo 42 ?x))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>unify</b> '(foo ?x 42) '(foo baz ?x))
+ ==> error: unification failure
+ </pre>
+ </p>
+
+
+ <p>UNIFY works also on arrays and vectors. Strings are treated as
+ atomic objects
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3) #(1 ?x ?y))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?x *)
+ <i>2</i>
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?z *)
+ <i>D</i>
+ </pre>
+ </p>
+
+ <p>So far so good, but how can you unify two structures? First of
+ all there is no portable way (yet) to list all the slots of a given
+ structure. Secondly, by allowing the unification of arbitrary
+ CONSes, we have created a short-circuit in the unification
+ machinery.</p>
+
+ <p>Dealing with object instances raises similar problems.</p>
+
+ <p>Suppose we have the following definition
+ <pre>
+ (defstruct foo a s d)
+ </pre>
+ The straighforward
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+ </pre>
+ cannot be built portably, besides, we do not even have the equivalent of the
+ <code>#S(...)</code> notation for regular CLOS objects. Moreover we want
+ to do other things with other data types.</p>
+
+ <p>A simple solution is to define a <em>template sub-language</em>
+ to express unifications between structure objects or standard
+ objects (and other data types as well.) Nevertheless, the
+ definition of such sub-language cannot be CONS based, because in
+ such case, we would conflate arbitrary CONSes and the expressions of
+ the sub-language.</p>
+
+ <p>To circumvent this problem we resort to the usual trick a ML
+ programmer uses to placate the type-checker: we introduce an
+ "intermediate" data type. Essentially the following
+ <pre>
+ (defclass <b>template</b> ()
+ ((spec :accessor template-spec :type (or cons symbol number) ...)))
+ </pre>
+ </p>
+
+ <p>The TEMPLATE class is accompanied by a reader macro
+ (<code>#T</code> for <em>template</em>, or <em>type</em>, with an
+ abuse of language) and an
+ appropriate PRINT-OBJECT method. The <code>#T</code> reader macro
+ expands as
+ <pre>
+ <b>#T</b><i>something</i> ==> (make-instance 'template :spec <i>something</i>)
+ </pre>
+ With this infrastructure we can
+ express the unification of the FOO instance as
+ <pre>
+ (<b>unify</b> #(FOO A 42 S NIL D NIL) <b>#T(foo foo-a 42)</b>)
+ </pre>
+ I.e. we use the actual structure accessor FOO-A to get to the the
+ value of the slot A in a FOO. This is an example of the template
+ language.</p>
+
+ <p>A more interesting example, which involves vectors is the
+ following
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3 4 5) <b>#T(vector 1 ?x &rest ?rest)</b>) ; You get the idea...
+ <i>#<ENVIRONMENT xxxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>#(3 4 5)</i>
+ </pre>
+ I.e. we have a DESTRUCTURING-BIND on steroids.<p>
+
+ <p>Note that separataing the templates is necessary if we want to do
+ something like
+ <pre>
+ cl-prompt> (<b>unify</b> '(1 2 3 4 5) <b>#T(list 1 ?x &rest ?rest)</b>)
+ <i>#<ENVIRONMENT xxxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>(3 4 5)</i>
+ </pre>
+ Without the template denoted by <code>#T(list ...)</code> the
+ unifier would have been utterly confused.</p>
+
+ <p>In the following the full extent of the UNIFICATION facility is
+ described in its main components.
+ </p>
+
+
+ <h2><a href="substitutions.html">Unifying Substitutions</a></h2>
+
+ <h2><a href="templates.html">The Template Sub-language</a></h2>
+
+ <h2><a href="templates.html">Control Flow</a></h2>
+
+ <h2><a href="unification-dictionary.html">The UNIFICATION Dictionary</a></h2>
+
+
+<!--
+;;; Copyright (c) 2004-2011 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/downloads.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,134 @@
+<html>
+ <head>
+ <title>CL Unification Download Page</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="downloads.html" class="navigation-link-selected">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> <div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>CL-UNIFICATION Download Page</h1>
+
+
+ <hr>
+ <em>
+ <p>
+ <b>DISCLAIMER:</b> 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.</p>
+
+ <p>The file <tt>COPYING</tt> 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.
+ </p>
+ </em>
+ <hr>
+
+
+ <h2>Download and CVS Repository</h2>
+
+ <p>The CVS repository is <a href="http://common-lisp.net/cgi-bin/viewcvs.cgi/cl-unification/?cvsroot=cl-unification">here</a>. You can download a tarball directly from there.</p>
+
+
+
+
+
+
+
+<!--
+;;; Copyright (c) 2004-2005 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-01-28</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/element-template-class.html new-cl-unification-1/docs/html/element-template-class.html
--- old-cl-unification-1/docs/html/element-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/element-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,132 @@
+<html>
+ <head>
+ <title>CL Unification: Class ELEMENT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ELEMENT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>ELEMENT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ AREF-TEMPLATE, ELT-TEMPLATE, NTH-TEMPLATE, NTHCDR-TEMPLATE
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ELEMENT-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY or a SEQUENCE.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/elt-template-class.html new-cl-unification-1/docs/html/elt-template-class.html
--- old-cl-unification-1/docs/html/elt-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/elt-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,176 @@
+<html>
+ <head>
+ <title>CL Unification: Class ELT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class ELT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>ELT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ ELT-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The ELT-TEMPLATE class denotes those object that are used
+ to unify against a particular element of a SEQUENCE.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>elt</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The ELT-TEMPLATE syntax denotes the element of <i>item</i> at
+ <i>index</i>. An ELT-TEMPLATE must be unified against a SEQUENCE
+ object. <i>item</i> is <em>unified</em> against the element
+ extracted from the sequence object at <i>index</i> by the standard
+ function ELT.<p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>elt</b> 2 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>elt</b> 42 ?x)))
+ --> Error: index 42 out of bounds.
+
+
+ cl-prompt> (setq e (unify 42 #T(<b>elt</b> 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>elt</b> 4 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #\Space
+ </pre>
+ </p>
+
+
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an ELT-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/expression-template-class.html new-cl-unification-1/docs/html/expression-template-class.html
--- old-cl-unification-1/docs/html/expression-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/expression-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,131 @@
+<html>
+ <head>
+ <title>CL Unification: Class EXPRESSION-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class EXPRESSION-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>EXPRESSION-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ ELT-TEMPLATE, SUBSEQ-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The EXPRESSION-TEMPLATE class is the root of the <em>expression template</em> sub-hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/find-variable-value-function.html new-cl-unification-1/docs/html/find-variable-value-function.html
--- old-cl-unification-1/docs/html/find-variable-value-function.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/find-variable-value-function.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,144 @@
+<html>
+ <head>
+ <title>CL Unification: Function FIND-VARIABLE-VALUE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function FIND-VARIABLE-VALUE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Function</i> <strong>FIND-VARIABLE-VALUE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>find-variable-value</b> <i>variable-name</i> &optional <i>env</i> <i>errorp</i>
+ => <i>value</i>, <i>found</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>variable-name</code></i>---a <i>symbol</i> denoting a <em>unification variable</em></p>
+ <p><i><code>env</code></i>---an <i>unification-environment</i></p>
+ <p><i><code>value</code></i>---an <i>object</i></p>
+ <p><i><code>found</code></i>---a <i>boolean</i></p>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function FIND-VARIABLE-VALUE searches the environment
+ <i>env</i> for the <i>value</i> associated to the unification variable
+ <i>variable-name</i>.<p>
+
+ <p>If there is a <i>value</i> associated to <i>variable-name</i> in
+ <i>env</i>, then it is returned; <i>found</i>, the second return
+ value, is T.
+
+ <p>If no value is associated to <i>variable-name</i> then
+ FIND-VARIABLE-NAME signals an error of type
+ UNIFICATION-VARIABLE-UNBOUND if <i>errorp</i> is non-NIL (the
+ default.) If <i>errorp</i> is NIL then FIND-VARIABLE-NAME returns
+ the values NIL and NIL.</p>
+
+ <p><i>env</i> defaults to *NULL-ENVIRONMENT*.
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, UNIFICATION-VARIABLE-UNBOUND, *NULL-ENVIRONMENT*</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/hash-t-read-macro.html new-cl-unification-1/docs/html/hash-t-read-macro.html
--- old-cl-unification-1/docs/html/hash-t-read-macro.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/hash-t-read-macro.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,139 @@
+<html>
+ <head>
+ <title>CL Unification: #T Reader Macro</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-SPEC</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Reader Macro</i> <strong>#T</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>#T</b><i>spec</i>
+ -> <i>template</i>
+ </pre>
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p><b>#T</b><i>spec</i> expands to <code>(make-template
+ <i>template-kind</i> <i>spec</i>)</code>.
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ <b>#T</b>foo ==> #<SYMBOL-TEMPLATE FOO xxxxxx>
+ </pre>
+ </p>
+
+
+ <p>
+ <pre>
+ <b>#T</b>(vector 1 2 &rest ?x) ==> #<VECTOR-TEMPLATE xxxxx>
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE, the "Template Sub-language" section.</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
Binary files old-cl-unification-1/docs/html/images/header_bg.gif and new-cl-unification-1/docs/html/images/header_bg.gif differ
Binary files old-cl-unification-1/docs/html/images/header_bg_1.gif and new-cl-unification-1/docs/html/images/header_bg_1.gif differ
Binary files old-cl-unification-1/docs/html/images/shim.gif and new-cl-unification-1/docs/html/images/shim.gif differ
Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.gif and new-cl-unification-1/docs/html/images/unif-templ-hier.gif differ
diff -rN -u old-cl-unification-1/docs/html/images/unif-templ-hier.pcl new-cl-unification-1/docs/html/images/unif-templ-hier.pcl
--- old-cl-unification-1/docs/html/images/unif-templ-hier.pcl 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/images/unif-templ-hier.pcl 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,1582 @@
+%-12345X@PJL JOB
+@PJL SET HOLD=OFF
+@PJL SET RESOLUTION = 600
+@PJL SET BITSPERPIXEL = 2
+@PJL SET ECONOMODE = OFF
+@PJL ENTER LANGUAGE = POSTSCRIPT
+%!PS-Adobe-3.0
+%%Title: Document
+%%Creator: PScript5.dll Version 5.2.2
+%%CreationDate: 10/10/2004 14:55:30
+%%BoundingBox: (atend)
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentData: Clean7Bit
+%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0
+%%LanguageLevel: 3
+%%EndComments
+
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+
+
+%%BeginProlog
+%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
+/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
+setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
+ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
+def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
+rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
+/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
+typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
+def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
+exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
+/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
+{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
+readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
+(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
+/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
+tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
+xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
+tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
+{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
+tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
+rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
+forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
+/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
+$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
+ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont
+lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict
+/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{
+(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
+$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
+repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname
+=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end
+end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking
+where{pop/setpacking where{pop oldpack setpacking}if}if
+%%EndResource
+userdict /Pscript_WinNT_Incr 230 dict dup begin put
+%%BeginResource: file Pscript_FatalError 5.0 0
+userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
+length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
+{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
+/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
+cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
+%%EndResource
+userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
+(This job requires more memory than is available in this printer.)100 500
+(Try one or more of the following, and then print again:)100 485
+(For the output format, choose Optimize For Portability.)115 470
+(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
+115 455(Reduce the number of fonts in the document.)115 440
+(Print the document in parts.)115 425 12/Times-Roman showpage
+(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
+version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
+105000 VM?
+%%BeginResource: file Pscript_Win_Basic 5.0 0
+/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
+/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
+/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
+d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
+/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
+/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
+/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
+, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
+languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
+d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
+/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
+currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
+counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
+/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
+d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
+/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
+{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
+/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
+{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
+{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
+itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
+ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
+nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
+neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
+- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
+2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
+{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
+/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
+{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
+dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
+E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
+^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
+16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
+bind d
+%%EndResource
+%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
+/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
+{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
+snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
+setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
+/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
+/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}?
+not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{
+/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @
+/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn
+/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! !
+/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string
+/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet
+defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource `
+mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)
+GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5
+-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub
+getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~
+/ColorRendering defineresource !}b/findcolorrendering where{!}{
+/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{
+/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}?
+/selectcolorrendering{findcolorrendering !/ColorRendering findresource
+setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get
+`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d
+/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{
+/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
+/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d
+E}bind d
+%%EndResource
+end
+%%EndProlog
+
+%%BeginSetup
+statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end
+[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
+featurebegin{
+%%BeginNonPPDFeature: JobTimeout 0
+0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse
+%%EndNonPPDFeature
+}featurecleanup
+
+featurebegin{
+%%BeginNonPPDFeature: WaitTimeout 120
+120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse
+%%EndNonPPDFeature
+}featurecleanup
+
+featurebegin{
+%%BeginFeature: *HPEdgeToEdge True
+<</EdgeToEdge true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPPaperPolicy PromptUser
+
+ <</DeferredMediaSelection true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPHalftone PrinterDefault
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Collate True
+<</Collate true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Smoothing True
+
+ << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >>
+ >> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *PageSize Letter
+
+ <</PageSize [612 792] /ImagingBBox null>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *StapleLocation 1parallel
+
+ userdict /HPStapleOption {(ONE)} put
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *MediaType None
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *OutputBin Upper
+<</Staple 0 /OutputType (TOP OUTPUT BIN)>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Duplex DuplexNoTumble
+
+ <</Duplex true /Tumble false>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRConstraints 0
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRHDInstalled JRHDStore
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRHDNotInstalled JRHDPrivate
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option2 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option6 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option3 True
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option5 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option20 Standard
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option21 MailboxModeMailbox
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *InstalledMemory 32-39MB
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *PrinterHardDisk False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JobRetention True
+
+%%EndFeature
+}featurecleanup
+1 setlinecap 1 setlinejoin
+/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def
+%%EndSetup
+
+userdict begin /ehsave save def end
+%%EndPageComments
+%%BeginPageSetup
+/DeviceRGB dup setcolorspace /colspABC exch def
+mysetup concat colspRefresh
+%%EndPageSetup
+
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_Win_GdiObject 5.0 0
+/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
+{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
+/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
+L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
+1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
+/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
+{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
+gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
+/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
+MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
+M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
+/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
+GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
+/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
+makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
+/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
+/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
+~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
+0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
+/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
+: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
+XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
+GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
+currentmatrix readonly d ; ;}if}b
+%%EndResource
+%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0
+/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d
+/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
+/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
+/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~
+rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width
+Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d
+/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90
+eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width
+Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf
+{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: !
+/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
+/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0
+Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ `
+/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d
+/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
+/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
+~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
+? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~
+d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height]
+d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height
+T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask
+E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType
+4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b
+%%EndResource
+end reinitialize
+/DeviceGray dup setcolorspace /colspABC exch def
+0 0 scol N 2950 725 M 3113 869 I K
+N 3113 869 M 3044 831 I 3069 806 I C
+ O N 2950 725 M 3113 775 I K
+N 3113 775 M 3038 769 I 3044 738 I C
+ O N 2950 725 M 3113 681 I K
+N 3113 681 M 3044 719 I 3038 681 I C
+ O N 2950 725 M 3113 588 I K
+N 3113 588 M 3069 650 I 3044 619 I C
+ O 55017 VM?
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_T42Hdr 5.0 0
+/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg
+-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string}
+forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array
+astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d
+/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @
+/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !}
+executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^
+(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015?
+{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^
+putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~
+0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy
+256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string
+0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~
+! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d
+/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $
+/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d
+/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42
+d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d
+/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont
+findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d
+/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d
+/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~
+d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx
+/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind
+readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d
+/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d
+/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{
+/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011
+ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @
+/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc
+~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource
+!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef `
+/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec
+cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^
+0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d
+%%EndResource
+end reinitialize
+-0.578 -0.207 1.387 0.922
+ 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00
+Type42DictBegin
+[<00010000000a000a000a000a6376742065146ccc000000ac000002746670
+676d2bc15a050000032000000768676c79661b44802b000058e80004e222
+68656164ce8b489100000a8800000036686865610dd60c5100000ac00000
+0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28
+000023486d6178700dba0872000051700000002070726570877d61440000
+5190000007556764697200000000000000000000000005ba0019000005ba
+001900000000000000000000000000000000000000000425001900000000
+ffe700000000ffe70000000000000000fe68ffea00000000000000000000
+0000000002f5ffee05cd000002ddffee02f0000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000
+000008000000080000000000000000000000000000000000000000000000
+00000000000000000000000000d2010e012c01130000000000c8010900c8
+000000000000000000000000000000890048001bff77ffb8ffe500a4005f
+000aff5cffa1fff6000000000000000afff6000000000000000000000059
+ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c
+00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae
+00a600940000000000ff000001e300000000000000000000000000000000
+00000000000000000000000000cd00cd006801ee0060008c000000000000
+0000000000000000000000a800a800a800b900cd00a80052016a0049007d
+007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094
+00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0
+01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac
+00c500850085005c0054006000b401baff1ffe680000008300bc00940094
+ff85ffae00520029061400ae00460046fe580560008f076002f20025003e
+004700500058007300a80160006000950025003e004700500058007300a8
+01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c
+00b0012b012b04ba013e018507600016000a004b403f545249483b393837
+363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19
+1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843
+58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d
+2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133
+592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a
+6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121
+1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0
+032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38
+211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9
+0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1
+0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118
+b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013
+b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0
+1943646060b0462344231020b046f02fb000121b2121208a208a52581133
+1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0
+462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225
+45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225
+456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0
+132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0
+8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c
+4b505a58b0032545b0032545606820b004252344b0042523441bb0032520
+4568208a2344b00325456860b003252344592d2cb00325204568208a2344
+b003254564686560b00425b0016023442d2cb00943588721c01bb0124358
+8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0
+5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345
+6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345
+64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6
+211b21212121592d2c01b0184358b0022545b002254564606ab00325456a
+6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420
+456a44592d2c012045b00055b018435a584568234569b0408b6120b08062
+6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b
+592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0
+0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003
+252045b040614459b0022543b00054b0022543b040545a58b004252045b0
+4060445959212121212d2c014b525843b00225452361441b2121592d2c01
+4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120
+b003252349b04060b0206320b000525823b002253823b002256538008a63
+381b212121212159012d2c4b505845441b2121592d2c01b005251023208a
+f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0
+062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010
+238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068
+013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b
+2111592d2c2045b00325465058b0022546206861b00325b003253f232138
+1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0
+005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0
+0325456461b0005358b0021bb04061b00359254569535845441b2121591b
+21b0022545b00225456164b028515845441b212159592d2c21210c642364
+8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002
+602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c
+6423648bb84000626023212d2c4b5358b00425b004254964234564696120
+b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220
+392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03
+592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0
+23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b
+2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01
+b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044
+1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d
+2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b
+7a592d2cb1020042b123018851b1400188535a58b910000020885458b202
+010243604259b12401885158b920000040885458b202020243604259b124
+01885458b2022002436042004b014b5258b2020802436042591bb9400000
+80885458b202040243604259b94000008063b80100885458b20208024360
+4259b94000010063b80200885458b2021002436042595959592d00010000
+00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4
+5fe9fb5cfe520b170760000000090001000100000000000100000760fe52
+00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258
+0032000000000239000002200000023900b602d70054047300170473004e
+071d0081055600580187005c02aa007b02aa004a031d004204ac00710239
+00b602aa0042023900b6023900000473005c047300e30473003f0473005a
+0473001f047300560473005c047300620473005604730056023900b60239
+00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4
+05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400
+0037055600a4047300a406aa00a405c700a406390060055600a406390060
+05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556
+000a04e300250239008b023900000239002103c1004a046afff402aa0056
+0473004e0473008b04000048047300480473004802390010047300480473
+008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048
+0473008b0473004802aa008b0400003f02390023047300870400001b05c7
+000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058
+0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473
+004e0473004e0473004e0473004e0473004e0473004e0400004804730048
+04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473
+008b04730048047300480473004804730048047300480473008704730087
+0473008704730087047300500333008504730071047300310473005602cd
+0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f
+04ac0071080000000639005004ac005c04ac007104ac007104ac00710473
+00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b
+02ec002d06250071071d004e0473004804730062023900b604ac00710464
+001404730042046400330556fffe0473008d0473008d0486005b0556fffe
+0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa
+005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54
+0473004c02aa005a02aa007f040000100400001004730050023900b60239
+00b603220090080000190556fffe055600a40556fffe055600a4055600a4
+023900ac0239ffdf023900080239001f06390060063900600639006005c7
+00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d
+02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3
+000c0556005c0400003f04e3002504000029021400bc05c7000204730048
+0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa
+001902aa002106ac007f06ac007f06ac003504e300000639006004730048
+023900bc0556005c0400003f05c700600400004805c70060040000480473
+00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4
+0513004805c70002055600a404730048055600a404730048047300a401d3
+0047047300a40255008b047300a402f3004205c700a40473008b05c700a4
+0473008b063900600473004805c700a402aa008b05c700a402aa002b0556
+005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087
+05c700a40473008704e300250400002904e300250400002904ae00a40639
+006006790060049c0048047300480400004804ae00480400002105310048
+0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa
+00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1
+02d600700556fffe0473004e05c700600400004805c70060040000480556
+00a404730048055600a404730048055600a4047300480639006004730048
+0639006004730048063900600473004805c700a40473008b05c700140473
+00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc
+01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3
+004205c700a40473008b05c700a40473008b063900600473004806390060
+0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7
+00a40473008705c700a40473008705c700a40473008705c700a404730087
+078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800
+0000071d004e0639005004730048023900b6078d001905c7000a078d0019
+05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473
+00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085
+02aa00ee034800370556fffe0646003306b7003303290033069a00000631
+0000069a0000033300290556fffe055600a40575000c055600a404e30025
+05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639
+006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e
+06390066023900080556000a049c0048040000480473008b01ec00790473
+00870481008b0452001b03e100480473008b0473005c01ec008b0400008b
+0400001b0473008b0400001b03e10048047300480491008b044800480473
+0087042d000e058500870585004802520008047300870473004804730087
+05850048055600a40666002d048900a405bc00600556005c023900bc0239
+00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4
+0556fffe053d00a4055600a4048900a406330023055600a4073500060514
+005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060
+05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc
+00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e
+080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473
+004805aa0004040000230479008b0479008b0400008b0491000a05b6008b
+0473008b047300480473008b0473008b0400004803aa00250400001b0698
+00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b
+042f008b0400001b05f4008b0456003504730048047300000310008b0400
+00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000
+0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473
+008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f
+0473000001480060028f004e028f005e028f005e0148006001ec004e01ec
+005801ec007101ec005601480060028f004e014800600148007502140039
+01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c
+00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c
+0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd
+005004cd002d04cd00870466006f043d003b0466003b047b00980400002d
+0550009804cd005404cd003704cd003704cd003702000060037100600566
+0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098
+05500098055000980550009804cd008304cd008304cd0083048f003b035c
+00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f
+0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466
+003b047b00980400002d0550009804cd0054028f004c048f003b0429005a
+0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639
+00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3
+02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa
+000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017
+0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473
+fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe
+0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556
+fffe0473004e055600a404730048055600a404730048055600a404730048
+055600a404730048055600770473fff1055600a404730048055600a40473
+0048055600a4047300480239009801d30098023900bc01d3008b06390060
+0473004806390060047300480639006004730048063900600473fff20639
+006004730048063900600473004806390060047300480639006004730048
+063900600473004806390060047300480639006004730048063900600473
+004805c700a40473008705c700a40473008705c700a40473008705c700a4
+0473008705c700a40473008705c700a40473008705c700a4047300870556
+000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2
+01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458
+00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85
+045801310458013f0458005a0458003d0458007504580048045800480458
+002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85
+0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327
+ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85
+04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df
+000001df000001df0000045c000c04c30035045cfff604bc001f022500ac
+04c3001f026600cd04730062034c008901df002701df00710364000001df
+0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056
+045800560458005602b8000a02b8000a03e1005203e100520698000a0698
+000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85
+0652005004a8002704cd00330414002902b8001f043d0033027b003d0364
+0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b
+01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266
+00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093
+0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000
+fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e
+0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000
+fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006
+03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac
+005003df00930571002d062100560635005e047f0056047f0056045e005e
+049a00500404009304f6005004ac005004ac0050047f0081047f00810537
+00500537005004ac005004ac002f0400008103df0093045e005e03df0050
+04ac005003df0050047f0056051200500431005004db0050053700500431
+0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73
+0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe
+009a0248008b048f008b035c0010035cffc903df0000035c001f04830050
+0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000
+fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060
+04bc001704fe003504fe006004fe004a0527005006d100350000fee10000
+fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85
+03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4
+ff85030e0048027b003d045801310458013f0458005a0458003d0458003d
+0458004a045800c90458002d0458002b0458005c04e3002d023900230556
+00a40473004805c700a40479008b04140029023900bc0400003701d3008b
+01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556
+00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b
+05a5000a043a000e057900770444005e057900a40473008b063900600473
+00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20
+0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d
+00330440006401f4ff8503fdff85044000640440006406d9001306d90013
+06d9001306d9001301ba00280493004a031d0042065200500252ff85025e
+ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd
+047300690568005c05c7006005c7006006aa008b05c70000098700a4078d
+00000556000004e3002d0800002901ae000501ae002a026600ea02660056
+0266006201ae002e04a8002701ae001001cb006801cb006801df000501df
+000501df002a01df002a01df002a01df002a028000ae028000b203640000
+03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8
+005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85
+04580056045800560458ff8504580056045800560458ff85045800560458
+00560458ff8504580056045800560458ff8504580056045800560458ff85
+04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8
+000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052
+03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698
+000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052
+03a000560458ff850323ff8506520050065200500252ff85025eff850652
+00500252ff85025eff85065200500252ff85025eff85065200500252ff85
+025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd
+00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85
+04c100330327ff8504c100330327ff8504c100330327ff8504c100330327
+ff660414002901baff850414002901baff850414002901baff8504140029
+01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4
+ff8504580056045800560458ff8503640000036400000364000003640000
+0364000003640000036400000364000005f3000505900005051f001f04bc
+001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46
+0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000
+ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2
+0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8
+000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f
+02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa
+000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d
+02aa001d055600a4047300480556fffe0473004e055600a40473008b0556
+00a40473008b055600a40473008b05c700600400004805c700a404730048
+05c700a40473004805c700a40473004805c700a40473004805c700a40473
+0048055600a404730048055600a404730048055600a404730048055600a4
+04730048055600a40473004804e300a402390010063900600473004805c7
+00a40473008b05c700a40473008b05c700a40473008b05c7007104730053
+05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400
+008b055600a40400008b055600a40400008b047300a401d3008b047300a4
+01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa
+00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b
+05c700a40473008b05c700a40473008b0639006004730048063900600473
+004806390060047300480639006004730048055600a40473008b055600a4
+0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7
+00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f
+0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239
+002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4
+0473008705c700a40473008705c700a40473008705c700a4047300870556
+000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a
+0556000a0400000e0556000a0400000e0556000a0400001b04e300250400
+002904e300250400002904e30025040000290473008b0239000d05c7000a
+0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c
+0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000
+05e2000005e20000059c0000059c00000400004804000048040000480400
+0048040000480400004805eb000005eb0000073000000730000007300000
+073000000473008b0473008b0473008b0473008b0473008b0473008b0473
+008b0473008b065c0000065c000007a1000007a1000007a1000007a10000
+075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec
+000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000
+03fb000003b3000003b30000047300480473004804730048047300480473
+004804730048063900000639000007da000007da00000776000007760000
+047300870473008704730087047300870473008704730087047300870473
+0087064c00000778000007ca000007490000058500480585004805850048
+0585004805850048058500480585004805850048063900000639000007da
+000007da000007760000077600000736000007360000049c0048049c0048
+04000048040000480473008b0473008b01ecffeb01ec0078047300480473
+004804730087047300870585004805850048049c0048049c0048049c0048
+049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a
+0000060a000005e2000005e20000059c0000059c00000473008b0473008b
+0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c
+000007a1000007a1000007a1000007a10000075900000759000005850048
+058500480585004805850048058500480585004805850048058500480639
+00000639000007da000007da000007760000077600000736000007360000
+049c0048049c0048049c0048049c0048049c0048049c0048049c00480556
+fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103
+02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e
+0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006
+01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239
+ffe6032900000318000002aa004602aa006e02aa00060473008704730087
+04730087047300870491008b0491008b04730087047300870556000a0556
+000a06a6000006e7000005eb0000034800370348003702aa005605850048
+058500480585004805850048058500480708000006930000070800000693
+00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8
+0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000
+fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47
+0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000
+ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae
+0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000
+fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8
+0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000
+ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87
+0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000
+ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035
+045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3
+0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4
+0473008b053d000d0473000305c7006905c700600400004805c70002066e
+0000053d005104730048047300480556006d0514006a04e3ffd106390060
+0556000c0724008b01d3008b02390014055600a40400008b01d300140400
+001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000
+0473008b055600a40556006a0400005004e50060035600000239002304f7
+00140239002304e3002d0625007105c700a4062c000a0400001b04e30025
+04000029046c001f046c006003c6004803c600330473003f0473002f03a9
+0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4
+097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607
+008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4
+0473008705c700a40473008705c700a40473008705c700a40473008705c7
+00a404730087047300480556fffe0473004e0556fffe0473004e08000000
+071d004e06390060047300480639006004730048055600a40400008b0639
+0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4
+097800a4084c00480639006004730048085b00a4046c008b05c700a40473
+008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4
+047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639
+00600473004805c700a402aa000605c700a402aa007c05c700a40473006a
+05c700a404730087040200420374002305c700a40473008b057900a404a8
+00420446003904e30025040000290556fffe0473004e0639006004730048
+0639006004730048063900600473004806390060047300480556000a0400
+001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048
+049c00480473008b0400001b0400000004730048047300480473004805db
+004804000048040000230552002304460048026200100473004804730048
+04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec
+008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085
+06aa008b0473ffb80473008b0455008b0473004805c50048058500480473
+004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8
+0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239
+0012023900230473000004c50048043b00870400001b05c7000a0400001b
+03ce000004000029046e002903c6002b03c6002c0400001b040000480400
+001b0400004806390060043f008b0446004804ae004b0473008b02ff000a
+040000080364008b047300480400001b04000048078e00480718004807fc
+004805b6002303930023060c0023061900100568008b04f0008b03e2001e
+048200880481008b0473008705cd000a0767fffd05cd000a047300480585
+004804970014063900600473004805c700600400004804e300a403fc008b
+04ff0000043c0032060d000a049d000006aa008506aa0085057900770473
+0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060
+0476004803c70014034f0028049700140496005e0400004801d3ffb80639
+006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4
+05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7
+00a4076c008b0514006d0400004a0679005e058500870639006004730048
+0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568
+0048095f006008800048095f006005e8001b05c700600400004803f80014
+02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479
+008b053d000f042f0008055600a40473008b048900a40426008b0514005a
+040000230556001804000008069d000a04d1000a071200a40543008b0847
+00a406c6008b05c700600400004805c700600400004804e3002d03aa0025
+0744000a0563000a057900770444005e070b000a053b000a070b000a053b
+000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a
+05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6
+008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4
+0473004806390060047300480735000605aa00040514005a040000230443
+001f03c6002b05c700a40479008b05c700a40479008b0639006004730048
+063900600473004805bc005e0400001b051f00080400001b051f00080400
+001b051f00080400001b057900770444005e071000a405bc008b053d0051
+0473004807d100510724004807e2006d06f0004a0582006d0468004a0838
+000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025
+02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1
+0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000
+000000280000002800000028000000380000009800000102000002a20000
+0412000005600000070e0000076a000007da0000084c000008f000000976
+000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000
+0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c
+00001402000014b000001520000015d0000016b8000018e400001a1a0000
+1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0
+0000215400002280000022da0000243a000024d8000025fe000026c80000
+28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8
+000032c60000335e000033bc0000342e00003484000035400000356a0000
+35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8
+00003e9200003ee800003fb2000040d00000411000004228000042da0000
+43ce000044ea0000460400004682000047e8000048ae0000496800004a68
+00004c5400004e0200004f7200005016000050fa0000515a000052380000
+52ec0000534c00005388000054f2000055320000558c000055da0000562c
+0000565a0000568a000056bc000056f60000572e000057660000589a0000
+58c8000058f4000059220000596c000059e400005a5000005a9400005b0a
+00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000
+5c9200005cb600005d0800005da200005e380000600e000061620000631a
+000063a40000642e000065680000670a0000689c000069f400006a500000
+6a9800006b7400006c6200006df200006eec00006f7c0000704600007112
+000072820000732c00007416000074c2000075120000757c000076060000
+7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84
+00007e1000007f0000007fda000080ce00008148000081c6000082500000
+8296000082f40000834e0000846c000085f20000864a000086aa00008770
+0000883a000088a200008918000089a400008a3e00008a7a00008ac60000
+8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a
+000090f0000091ac00009390000093e00000942600009466000094b80000
+94fa0000953600009576000096180000965c000096a2000097080000974e
+00009796000097f00000983200009868000098d00000994c000099740000
+99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce
+00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000
+a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e
+0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000
+aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe
+0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000
+b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818
+0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000
+ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a
+0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000
+c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244
+0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000
+ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee
+0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000
+d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c
+0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000
+d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72
+0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000
+e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a
+0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000
+ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e
+0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000
+f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8
+0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000
+fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e
+0000fd800000fe460000fefe0000ffb800010072000101240001018c0001
+02000001023a000102e000010336000103ba0001042c000104b600010512
+00010562000105ae00010624000107560001087c00010942000109d80001
+0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc
+000110fe00011184000112520001131400011396000114a8000115dc0001
+16ae000117b2000118900001190a0001193600011976000119a6000119fe
+00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001
+20ec0001224c0001231c0001241c00012568000125780001264c0001272e
+000127be0001294600012a3600012b2200012b8c00012bd800012c060001
+2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c
+0001324000013250000133440001343a0001353000013590000135ea0001
+3688000137c200013882000139b400013a1600013ae200013b8600013ce6
+00013e1a00013ede00013f1c000140420001410c000142680001430c0001
+44040001448e0001456000014660000146d20001485c0001496c00014aa6
+00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001
+513c0001528a000153ac0001552c0001562800015700000157740001584e
+0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001
+600e000160b00001619c0001621e0001633e000164060001648600016658
+000167d20001693e000169e200016a9c00016b5600016c4400016d020001
+6d6400016dfa00016f2e0001702600017120000171740001728a000172b0
+000173c6000173d6000173e60001748000017490000175b8000176900001
+776a0001778e000177cc00017846000178d40001794a0001798000017abc
+00017b1200017baa00017c7400017cf800017de400017e2400017e480001
+7e6c00017fce00018070000181f6000182ec000183e600018450000184f6
+000185f20001864a000186b00001871c0001882600018890000188e20001
+892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a
+00018dd000018e3a00018ee600018f6600018fda00019078000191760001
+91fc0001929000019320000193fe000194a8000195940001962a000196ae
+00019780000198440001990e000199ee00019af200019c3600019d4c0001
+9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132
+0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001
+a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568
+0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001
+a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810
+0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001
+a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac
+0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001
+b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700
+0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001
+bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e
+0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001
+c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa
+0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001
+c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4
+0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001
+c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e
+0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001
+ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8
+0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001
+cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44
+0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001
+d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a
+0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001
+d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14
+0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001
+e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696
+0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001
+ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe
+0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001
+f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca
+0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001
+feea0001ffe40002001c000200c60002010a00020190000201da000202fc
+0002034c00020496000204e2000205bc000205fc000207300002076c0002
+07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32
+00020ee00002103a0002109a0002112600021250000212e0000213400002
+14160002147800021540000215e80002164c000216aa0002175c000217ee
+0002181a00021868000218d40002193400021a1800021b1e00021b940002
+1d5a00021dce00021e6400021f6a00022052000220940002219e00022328
+0002239400022476000224ba000225c400022734000227a0000228880002
+2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c
+0002310c000231ec00023352000234ec00023640000237b8000239980002
+3a8000023bae00023d4400023f200002413200024338000245a6000247b2
+00024a0400024d2e00024f160002515a0002534a000254da0002566a0002
+57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2
+0002612000026262000263ac00026504000266340002676a000268ae0002
+6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa
+00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002
+7e6a00027efa00028006000280f2000281a400028288000282e60002834e
+000284680002853a0002868a000287ee0002896200028a6e00028aee0002
+8c4200028d9800028dd800028ed400029016000290ae0002919000029230
+000293460002947600029514000296760002982c000299c000029b3c0002
+9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c
+0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002
+af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422
+0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002
+b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862
+0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002
+b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede
+0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002
+c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48
+0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002
+d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c
+0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002
+d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4
+0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002
+e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa
+0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002
+f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38
+0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002
+fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44
+0002ffa200030008000300420003007e000300c6000301120003014e0003
+018c000301d000030214000302560003028e000302c6000303080003033c
+00030390000303c200030402000304480003047a000304be000305020003
+05480003059000030794000307d400030810000308400003089e000308e2
+0003091800030966000309b400030a0600030a5800030aae00030ae20003
+0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16
+00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003
+10ca0003111e00031160000311b8000312a6000312d80003130800031338
+00031392000313e60003144c00031484000314ba000314f0000315440003
+1592000315e800031632000316820003178e00031884000318ec00031954
+00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003
+1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c
+00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003
+21d800032210000322400003228a000322b0000322f40003235200032394
+000323d00003240a000324400003247c000324be000325ae000325e20003
+26240003265a0003268e000326d800032728000328c200032a1800032a58
+00032a9000032adc00032b1800032b5200032d6200032db000032fd60003
+3126000331bc000332b80003330a0003343000033676000339520003398a
+000339b600033a3400033ac200033aee00033b5800033c2800033cf60003
+3d0800033dac00033fbe00033fec0003405000034094000341000003417a
+000341da00034240000342a00003431600034384000343e80003450a0003
+45f8000346a000034712000347b000034820000348d60003496800034a50
+00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003
+4f860003500c00035110000352c800035310000353680003539e000353ce
+000353f2000354160003545400035492000354d8000355060003553c0003
+557200035598000355c0000355fc00035638000356600003568c000356c8
+00035708000357300003575800035780000357a8000357e4000358200003
+58560003588c000358c4000358e80003591e0003595200035990000359b6
+000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003
+5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52
+00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003
+60000003604600036082000360c0000360fc000361380003617c000361a2
+000361d8000362060003622c0003625200036288000362b6000362dc0003
+63020003633e0003637a000363b6000363f20003641a000364420003646c
+00036496000364be000364e60003650e0003653600036578000365a40003
+65dc0003660a000366420003667000036698000366c60003671200036750
+00036796000367dc0003681200036840000368660003688c000368bc0003
+68e40003690c000369340003697c000369ba000369f000036a3800036a5e
+00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003
+6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62
+00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003
+6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea
+0003700e000370340003705800037094000370d00003710c000371540003
+717c000371a40003734200037376000373ae000373e80003741a0003744c
+00037484000374bc000375040003754e00037596000375de000376360003
+768e000376e200037738000377a8000378180003784600037874000378a6
+000378d80003790e0003794000037996000379ee00037a5000037ab20003
+7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90
+00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003
+7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe
+0003813400038174000381b40003820400038256000382b6000383160003
+8374000383d40003842c00038488000384b6000384e40003851600038548
+00038580000385b8000386020003864e000386a6000386fe000387500003
+87a4000387d2000388040003883600038868000388a6000388e400038922
+00038960000389ba00038a1a00038a8200038ae600038b1400038b420003
+8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e
+00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003
+8fda0003900a0003903e00039072000390a4000390e40003911800039148
+00039176000391a6000391dc0003920a0003923a0003928c000392e00003
+932c00039378000393cc0003942000039484000394ea000395440003959e
+000396060003966e000396d20003973c000397b40003982c000398680003
+98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2
+00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003
+9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0
+0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003
+a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500
+0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003
+a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6
+0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003
+ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08
+0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003
+b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422
+0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003
+b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea
+0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003
+bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2
+0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003
+c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8
+0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003
+c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950
+0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003
+cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72
+0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003
+d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a
+0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003
+d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c
+0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003
+dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2
+0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003
+e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8
+0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003
+ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa
+0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003
+fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112
+000401d4000402ce0004037200040382000403aa00040428000404380004
+0476000404b4000404f2000405200004054c000405780004059e000405ca
+000405f6000406240004065200040680000406ac000406da000407080004
+0736000407640004079a000407d0000408060004083c00040872000408a8
+000408de00040914000409240004095a00040990000409c2000409f40004
+0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e
+00040e8600040f7600040fa400040fd2000410000004102e000410c20004
+10e80004110e0004113400041162000411900004123e000412d800041306
+000413340004136600041398000413c6000413f400041426000414580004
+1486000414b4000414e6000415180004154600041574000415a6000415d8
+00041606000416340004166600041698000416c6000416f4000417260004
+175800041786000417b4000418aa00041990000419be000419ec00041a66
+00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004
+1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a
+0004203800042090000420ce00042168000421c80004223a000423080004
+231800042420000424e8000425bc000426ec000427c20004289000042962
+00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004
+2eb600042f7c00043086000431f000043260000432e80004339a0004340a
+0004341a0004342a000434cc00043562000435b6000436ba000437600004
+3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca
+00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004
+40640004411c000441d80004435400044364000444060004449a000445b6
+0004462e000446a4000447520004483c000448d00004493c00044a1c0004
+4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8
+0004516200045210000453180004532800045406000454fe0004550e0004
+55a000045642000456800004575000045810000458ca000459bc00045b28
+00045c8e00045dbc00045e92000460060004610c00046220000462920004
+641c000464860004656c0004666000046706000467380004676a0004677a
+000468500004698400046a8400046b5c00046c6400046d4e00046dae0004
+6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4
+00047482000475180004767a0004768a000477d6000478e600047a2a0004
+7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c
+00047f2c00047fb2000480420004819e000482f2000483a20004843c0004
+85560004865400048712000487e40004890600048a3e00048b1400048c12
+00048d2c00048e7800049016000491a2000492540004930a0004944c0004
+957800049610000496b6000496e80004971a000498e200049a8c00049bb8
+00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004
+a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8
+0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004
+afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac
+0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004
+bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2
+0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004
+c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936
+0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004
+cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96
+0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004
+ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec
+0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004
+d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804
+0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004
+dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012
+0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001
+000008d1008c0010004c000700020010002f005500000469ffff00030001
+b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01
+3500050040012eb31c1f3930411201280001004001280080012800900128
+00a0012800b00128000500ef0126000100400125b31b1f3940410a012400
+01002f01050001004f010400010040010340aa090d392f652f662f672f68
+2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f
+f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70
+7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf
+6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415
+1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316
+7a431921794319217f413201340001007f01330080013300900133000300
+6f0132007f0132008f01320003007001210001002f0121003f0121004f01
+21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00
+60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01
+0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01
+0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001
+0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01
+0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01
+0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00
+e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00
+05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00
+ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00
+ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00
+ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00
+70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00
+3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600
+0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801
+0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001
+0700d001070004004f010700010040010040640b103940fe0b1139e0f601
+e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be
+0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92
+93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41
+0f0131007f0131008f01310003013001160032001f011901160015001f01
+16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700
+4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016
+0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115
+3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9
+f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780
+e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4
+f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0
+f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470
+c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685
+022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f
+897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485
+042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715
+1836151535151234150f33150c3215093115063015032f15002e1526270f
+28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423
+0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c
+0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03
+bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b
+701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0
+13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0
+332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85
+1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090
+1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73
+732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef
+45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b73737473737373732b74737374737373747374737474737374
+7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b
+2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75
+5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018
+b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373
+2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0
+1a23424bb0c8524bb036505bb00c23422b00000000>
+[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109
+16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage
+]def
+108 44
+PrepFor2015
+AddFontInfoBegin
+AddFontInfo
+/OrigFontType /TrueType def
+/OrigFontName <4D6963726F736F66742053616E73205365726966> def
+/OrigFontStyle () def
+/FSType 8 def
+AddFontInfoEnd
+[16#2c 16#6e18af9b ] AddXUID
+Type42DictEnd
+1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304
+01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d
+063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b
+e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31
+30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb
+7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char
+1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03
+040d0d063b03400809037f3030e9090148099809b809f809040709170977
+09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111
+231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char
+1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301
+0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d
+0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d
+02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18
+104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd
+4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char
+1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115
+080103470901080901090d92060407178717020b00171392001307101710
+020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715
+17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703
+01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b
+571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10
+2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000
+1110002132001723262623220011100033323637330600030afec9fe8d01
+730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01
+5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char
+1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307
+9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03
+077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b
+02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10
+2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002
+2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01
+29010e0107012000>/TTE1CD9F20t00 AddT42Char
+1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03
+020302011c018100141400b8fff840320b0b063b0000148a14012c143c14
+0208141814020902050e150e250e350e0403197d070e170e270e370e040e
+040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800
+030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f
+021d086b028711010212110915919706010606081c9209030008481e0177
+1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b
+011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b
+2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216
+16151406071516170121323635342121056ad28a25ac70fe99c20289aad8
+88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04
+31d80192728cfa00>/TTE1CD9F20t00 AddT42Char
+1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000
+6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd
+5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char
+1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203
+0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40
+120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d
+ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121
+1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char
+1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036
+09b8ffb840960910368c0b9c0b0283099309020268040101480458047804
+0302670301014703570377030302180a0101050a150a250a0302880a980a
+a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705
+05018505950502001e022e0202037702a702b702c702d702050185029502
+0205020a030479040108041804280438040409000b08030104070b027f00
+0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07
+400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d
+712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931
+305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f
+5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801
+23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char
+1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d
+05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d
+0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40
+17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded
+322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421
+21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb
+9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char
+1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f
+01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18
+102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4
+>/TTE1CD9F20t00 AddT42Char
+1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504
+0401020607070101041c01020481030a1403030a01071c01000781080914
+08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47
+0a570a670a0401070a170a270a03029809b80902037709013a094a095a09
+6a090418092809880903020a09010a0306934007021702020b0002400b0b
+063b020203080903080c0377020b087602370c670cf70c03580c780c0208
+0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f
+5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910
+c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01
+01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8
+fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char
+1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801
+1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/N 49 def
+/T 55 def
+/H 43 def
+/C 38 def
+/D 39 def
+/R 53 def
+/hyphen 16 def
+/E 40 def
+/M 48 def
+/P 51 def
+/L 47 def
+/A 36 def
+/.notdef 0 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 1 /N put
+dup 2 /T put
+dup 3 /H put
+dup 4 /C put
+dup 5 /D put
+dup 6 /R put
+dup 7 /hyphen put
+dup 8 /E put
+dup 9 /M put
+dup 10 /P put
+dup 11 /L put
+dup 12 /A put
+pop
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_Text 5.0 0
+/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
+/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
+length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
+{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
+/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
+if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
+{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
+StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
+! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
+put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
+makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
+Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
+/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
+{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
+/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
+/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
+/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
+Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
+add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
+/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
+FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
+idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
+Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
+length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
+add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
+putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
+256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
+/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
+definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
+makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
+findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
+{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
+get undefinefont}forall undefinefont}b
+%%EndResource
+end reinitialize
+F /F0 0 /0 F /TTE1CD9F20t00 mF
+/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS
+F0S47YFFFFFFBB Ji
+3125 894 M <010203040506070208090A0B0C0208>S
+3125 800 M <010203070208090A0B0C0208>S
+3125 706 M <080B02070208090A0B0C0208>S
+: 3125 550 594 78 rc 317 VM?
+1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002
+067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01
+270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f
+ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd
+6805ba00>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/F 41 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 13 /F put
+pop
+3125 613 M <0C06080D070208090A0B0C0208>S
+; N 3625 1056 M 3788 1056 I K
+N 3788 1056 M 3713 1075 I 3713 1038 I C
+ O 951 VM?
+1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076
+0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102
+131d231d531d0303381a481a020228173817481703007814010255140155
+100103680e780e02780d0101080d010a5a0c01580b010225093509020317
+05270537050300670201024a0201030a0f1b21040068150115189112b8ff
+fc40150d0d063b120407034703570367038703050b000307b8fff040200d
+0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f
+21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403
+6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f
+2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f
+5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d
+5f5d2b2b0520002733161633323635342624263534243332041723022122
+0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec
+f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e
+b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char
+1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff
+fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705
+6705770587050647055705670587059705a705b705c705f7050998050178
+0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3
+c305ba00>/TTE1CD9F20t00 AddT42Char
+1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303
+671401022511012a0f010388080102350801039801010217911818002809
+01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818
+020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d
+02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303
+b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f
+5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f
+5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f
+5d5f5d2b0520001110002120041723262623220011100033203735213521
+112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201
+3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9
+d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/S 54 def
+/I 44 def
+/G 42 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 14 /S put
+dup 15 /I put
+dup 16 /G put
+pop
+3800 1081 M <0E02060F0110070208090A0B0C0208>S
+N 2744 1338 M 2906 1056 I K
+N 2906 1056 M 2888 1131 I 2850 1113 I C
+ O N 2744 1338 M 2906 1338 I K
+N 2906 1338 M 2831 1356 I 2831 1319 I C
+ O 2919 1363 M <0B0F0E02070208090A0B0C0208>S
+N 2606 1056 M 2906 1056 I K
+N 2906 1056 M 2831 1075 I 2831 1038 I C
+ O 635 VM?
+1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678
+019801c80103023501450155016501040307011701270167010477029702
+c70203023a024a025a026a0204030802180228026802040a020303020800
+700207036d0237086708f7080358087808020808b80802005f5d715d2b2b
+00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a
+05061c0504068100011400000105041c05060481030214030302872e4d2b
+084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301
+3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char
+1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92
+06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d
+0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd
+003fed3fed31301b404a12920a001a002a000300040c9205061506250603
+0906130f7d03157d09406803010a031a033a034a03046709010509150935
+094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b
+015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110
+00212000111000013200111000232200111000031f01340188fe78feccfe
+cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1
+0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/V 57 def
+/O 50 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 17 /V put
+dup 18 /O put
+pop
+2919 1081 M <110804021206070208090A0B0C0208>S
+N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C
+ O N 1769 1338 M 1931 1619 I K
+N 1931 1619 M 1875 1563 I 1913 1544 I C
+ O N 1769 1338 M 1931 1525 I K
+N 1931 1525 M 1869 1481 I 1894 1456 I C
+ O N 1769 1338 M 1931 1431 I K
+N 1931 1431 M 1856 1413 I 1875 1375 I C
+ O N 1769 1338 M 1931 1338 I K
+N 1931 1338 M 1856 1356 I 1856 1319 I C
+ O N 1769 1338 M 1931 1244 I K
+N 1931 1244 M 1875 1300 I 1856 1263 I C
+ O N 1769 1338 M 1931 1150 I K
+N 1931 1150 M 1894 1219 I 1869 1194 I C
+ O N 1769 1338 M 1931 1056 I K
+N 1931 1056 M 1913 1131 I 1875 1113 I C
+ O 635 VM?
+1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a
+041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600
+1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209
+056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68
+0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b
+002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708
+19070608810001140000010706190708068105041405050487052e2b084b
+52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101
+330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300
+>/TTE1CD9F20t00 AddT42Char
+1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708
+0111020b1e910e4005040e91183016910503179104270001081a181a020d
+020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa
+b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea
+b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7
+20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f
+2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d
+5d5d01140421211121320415140716160121323635342623211121203534
+26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01
+61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379
+>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/Y 60 def
+/B 37 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 19 /Y put
+dup 20 /B put
+pop
+1944 1644 M <0E130914120B070208090A0B0C0208>S
+635 VM?
+1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e
+05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015
+0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00
+3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311
+10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6
+0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char
+1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007
+0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40
+6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b
+07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded
+102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332
+36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00
+>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/U 56 def
+/J 45 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 21 /U put
+dup 22 /J put
+pop
+1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S
+1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S
+317 VM?
+1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b
+1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017
+002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137
+1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f
+001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8
+404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103
+003a014a015a01030105041504250403090304180b0b063b0413381e481e
+020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6
+400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01
+0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c
+02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d
+ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139
+393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c
+005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011
+10002120001110072736111000232200111000333237273705f473f2a3cd
+fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489
+bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe
+e9fec7317389>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/Q 52 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 23 /Q put
+pop
+1944 1363 M <0E08171508010408070208090A0B0C0208>S
+N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C
+ O 1944 1269 M <011509140806070208090A0B0C0208>S
+1944 1175 M <010F0B070208090A0B0C0208>S
+1944 1081 M <0C06060C13070208090A0B0C0208>S
+N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C
+ O N 2025 844 M 2188 963 I K
+N 2188 963 M 2119 931 I 2138 900 I C
+ O N 2025 844 M 2188 725 I K
+N 2188 725 M 2138 788 I 2119 756 I C
+ O 2200 988 M <0E15140E0817070208090A0B0C0208>S
+2200 750 M <080B0809080102070208090A0B0C0208>S
+N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C
+ O N 988 1088 M 1150 1338 I K
+N 1150 1338 M 1094 1288 I 1125 1263 I C
+ O N 988 1088 M 1150 844 I K
+N 1150 844 M 1125 919 I 1094 894 I C
+ O 1163 1363 M <02130A08070208090A0B0C0208>S
+N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C
+ O 317 VM?
+1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537
+05670597050409020504050203020106010809080b0a0b0007000201020b
+000b03030a050605080708040409070106018100071400000709030a0381
+040914040409070627066706770604080428046804780404010603040a40
+13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425
+04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d
+03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f
+3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008
+c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901
+3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6
+fde2021efd4a>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/X 59 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 24 /X put
+pop
+1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S
+N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C
+ O 575 1113 M <0208090A0B0C0208>S
+N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C
+ O LH
+(%%[Page: 1]%%) =
+%%PageTrailer
+
+%%Trailer
+%%DocumentNeededResources:
+%%DocumentSuppliedResources:
+%%+ procset Pscript_WinNT_ErrorHandler 5.0 0
+%%+ procset Pscript_FatalError 5.0 0
+%%+ procset Pscript_Win_Basic 5.0 0
+%%+ procset Pscript_Win_Utils_L2 5.0 0
+%%+ procset Pscript_Win_GdiObject 5.0 0
+%%+ procset Pscript_Win_GdiObject_L3 5.0 0
+%%+ procset Pscript_T42Hdr 5.0 0
+%%+ procset Pscript_Text 5.0 0
+Pscript_WinNT_Incr dup /terminate get exec
+ehsave restore
+(%%[LastPage]%%) =
+%%EOF
+%-12345X@PJL EOJ
+%-12345X
\ No newline at end of file
Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.pdf and new-cl-unification-1/docs/html/images/unif-templ-hier.pdf differ
diff -rN -u old-cl-unification-1/docs/html/images/unif-templ-hier.ps new-cl-unification-1/docs/html/images/unif-templ-hier.ps
--- old-cl-unification-1/docs/html/images/unif-templ-hier.ps 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/images/unif-templ-hier.ps 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,1574 @@
+%!PS-Adobe-3.0
+%%Title: Document
+%%Creator: PScript5.dll Version 5.2.2
+%%CreationDate: 10/10/2004 14:55:30
+%%BoundingBox: (atend)
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentData: Clean7Bit
+%%TargetDevice: (HP LaserJet 8150 Series) (3010.107) 0
+%%LanguageLevel: 3
+%%EndComments
+
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+
+
+%%BeginProlog
+%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
+/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
+setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
+ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
+def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
+rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
+/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
+typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
+def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
+exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
+/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
+{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
+readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
+(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
+/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
+tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
+xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
+tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
+{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
+tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
+rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
+forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
+/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
+$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
+ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont
+lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict
+/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{
+(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
+$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
+repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname
+=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end
+end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking
+where{pop/setpacking where{pop oldpack setpacking}if}if
+%%EndResource
+userdict /Pscript_WinNT_Incr 230 dict dup begin put
+%%BeginResource: file Pscript_FatalError 5.0 0
+userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
+length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
+{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
+/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
+cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
+%%EndResource
+userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
+(This job requires more memory than is available in this printer.)100 500
+(Try one or more of the following, and then print again:)100 485
+(For the output format, choose Optimize For Portability.)115 470
+(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
+115 455(Reduce the number of fonts in the document.)115 440
+(Print the document in parts.)115 425 12/Times-Roman showpage
+(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
+version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
+105000 VM?
+%%BeginResource: file Pscript_Win_Basic 5.0 0
+/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
+/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
+/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
+d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
+/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
+/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
+/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
+, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
+languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
+d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
+/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
+currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
+counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
+/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
+d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
+/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
+{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
+/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
+{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
+{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
+itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
+ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
+nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
+neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
+- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
+2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
+{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
+/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
+{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
+dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
+E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
+^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
+16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
+bind d
+%%EndResource
+%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
+/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
+{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
+snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
+setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
+/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
+/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}?
+not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{
+/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @
+/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn
+/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! !
+/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string
+/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet
+defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource `
+mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)
+GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5
+-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub
+getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~
+/ColorRendering defineresource !}b/findcolorrendering where{!}{
+/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{
+/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}?
+/selectcolorrendering{findcolorrendering !/ColorRendering findresource
+setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get
+`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d
+/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{
+/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
+/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d
+E}bind d
+%%EndResource
+end
+%%EndProlog
+
+%%BeginSetup
+statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end
+[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
+featurebegin{
+%%BeginNonPPDFeature: JobTimeout 0
+0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse
+%%EndNonPPDFeature
+}featurecleanup
+
+featurebegin{
+%%BeginNonPPDFeature: WaitTimeout 120
+120 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse
+%%EndNonPPDFeature
+}featurecleanup
+
+featurebegin{
+%%BeginFeature: *HPEdgeToEdge True
+<</EdgeToEdge true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPPaperPolicy PromptUser
+
+ <</DeferredMediaSelection true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPHalftone PrinterDefault
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Collate True
+<</Collate true>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Smoothing True
+
+ << /PostRenderingEnhance true /PostRenderingEnhanceDetails << /REValue 2 /Type 8 >>
+ >> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *PageSize Letter
+
+ <</PageSize [612 792] /ImagingBBox null>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *StapleLocation 1parallel
+
+ userdict /HPStapleOption {(ONE)} put
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *MediaType None
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *OutputBin Upper
+<</Staple 0 /OutputType (TOP OUTPUT BIN)>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Duplex DuplexNoTumble
+
+ <</Duplex true /Tumble false>> setpagedevice
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRConstraints 0
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRHDInstalled JRHDStore
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JRHDNotInstalled JRHDPrivate
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *HPPrinterModelName HP_LaserJet_8150_Series_PS
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option2 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option6 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option3 True
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option5 False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option20 Standard
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *Option21 MailboxModeMailbox
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *InstalledMemory 32-39MB
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *PrinterHardDisk False
+
+%%EndFeature
+}featurecleanup
+featurebegin{
+%%BeginFeature: *JobRetention True
+
+%%EndFeature
+}featurecleanup
+1 setlinecap 1 setlinejoin
+/mysetup [ 72 600 V 0 0 -72 600 V 2.99905 785.99908 ] def
+%%EndSetup
+
+userdict begin /ehsave save def end
+%%EndPageComments
+%%BeginPageSetup
+/DeviceRGB dup setcolorspace /colspABC exch def
+mysetup concat colspRefresh
+%%EndPageSetup
+
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_Win_GdiObject 5.0 0
+/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
+{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
+/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
+L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
+1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
+/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
+{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
+gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
+/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
+MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
+M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
++}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
+/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
+GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
+/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
+makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
+/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
+/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
+~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
+0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
+/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
+: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
+XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
+GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
+currentmatrix readonly d ; ;}if}b
+%%EndResource
+%%BeginResource: file Pscript_Win_GdiObject_L3 5.0 0
+/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 1 d/RepsV 1 d/RepsH 1 d
+/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
+/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
+/SetBGndFGnd{BGnd null ne{BGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~
+rf}if FGnd null ne{FGnd aload ! scol}if}b/PaintProc{` SetBGndFGnd RepsH{Width
+Height F mx PaintData imagemask Width 0 +}repeat E}b E d/mp/makepattern , d
+/build_pattern{CTMsave GDIBWPatternMx setmatrix/nupangle where{! nupangle -90
+eq{nupangle R}if}if GDIBWPatternDict @ ` Width Height ne{Width Height gt{Width
+Height V 1}{1 Height Width V}? +S}if xOrg yOrg E matrix + mp CTMrestore}b/hbf
+{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}{L}? ;}b/pbf{: !
+/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
+/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1 d/BBox[0 0
+Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d 20 dict @ `
+/ImageType 1 d/Width Width d/Height Height d/ImageMatrix[1 0 0 1 0 0]d
+/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
+/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
+~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
+? ;}b/mask_pbf{:/fEOFill ~ d 20 dict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/Height ~
+d/Width ~ d/PatternType 1 d/PaintType 2 d/TilingType 1 d/BBox[0 0 Width Height]
+d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d/PaintProc{` Width Height
+T 1 1 dtransform abs ~ abs ~ 0 0 3 -1 $ 0 0 6 array astore{PaintData}imagemask
+E}b & mx makepattern setpattern E fEOFill{O}{L}? ;}b/grf4{4 dict `/ShadingType
+4 d/DataSource ~ d/ColorSpace ~ d & E shfill}b
+%%EndResource
+end reinitialize
+/DeviceGray dup setcolorspace /colspABC exch def
+0 0 scol N 2950 725 M 3113 869 I K
+N 3113 869 M 3044 831 I 3069 806 I C
+ O N 2950 725 M 3113 775 I K
+N 3113 775 M 3038 769 I 3044 738 I C
+ O N 2950 725 M 3113 681 I K
+N 3113 681 M 3044 719 I 3038 681 I C
+ O N 2950 725 M 3113 588 I K
+N 3113 588 M 3069 650 I 3044 619 I C
+ O 55017 VM?
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_T42Hdr 5.0 0
+/asc42 0.0 d/sF42{/asc42 ~ d Ji}bind d/bS42{0 asc42 -M}bind d/eS42{0 asc42 neg
+-M}b/Is2015?{version cvi 2015 ge}bind d/AllocGlyphStorage{Is2015?{!}{{string}
+forall}?}bind d/Type42DictBegin{25 dict `/FontName ~ d/Encoding ~ d 4 array
+astore cvx/FontBBox ~ d/PaintType 0 d/FontType 42 d/FontMatrix[1 0 0 1 0 0]d
+/CharStrings 256 dict `/.notdef 0 d & E d/sfnts}bind d/Type42DictEnd{& @
+/FontName get ~ definefont ! E}bind d/RDS{string currentfile ~ readstring !}
+executeonly d/PrepFor2015{Is2015?{/GlyphDirectory 16 dict d sfnts 0 get @ 2 ^
+(glyx)putinterval 2 ^(locx)putinterval ! !}{! !}?}bind d/AddT42Char{Is2015?
+{findfont/GlyphDirectory get ` d E ! !}{findfont/sfnts get 4 ^ get 3 ^ 2 ^
+putinterval ! ! ! !}?}bind d/IDStrNull{1 add 2 mul @ string 0 1 3 ^ 1 sub{1 ^ ~
+0 put}for ~ !}bind d/IDStr{@ 1 add 2 mul string 0 1 3 ^{1 ^ ~ @ 2 mul ~ 3 copy
+256 idiv put ~ 1 add ~ 256 mod put}for ~ !}bind d/IDStr2{~ @ 1 add 2 mul string
+0 1 3 ^{1 ^ ~ @ 2 mul ~ 5 ^ add 3 copy 256 idiv put ~ 1 add ~ 256 mod put}for ~
+! ~ !}bind d/CIDT42Begin{25 dict `/CDevProc ~ d/CIDMap ~ d/CIDCount ~ d
+/CIDSystemInfo 3 dict @ ` 3 -1 $/Supplement ~ d 3 -1 $/Ordering ~ d 3 -1 $
+/Registry ~ d E d/CIDFontName ~ d/Encoding ~ d 4 array astore cvx/FontBBox ~ d
+/CharStrings 2 dict @ `/.notdef 0 d E d/GDBytes 2 d/CIDFontType 2 d/FontType 42
+d/PaintType 0 d/FontMatrix[1 0 0 1 0 0]d/Metrics2 16 dict d/sfnts}bind d
+/CIDT42End{CIDFontName & E/CIDFont defineresource !}bind d/T42CIDCP32K{/CIDFont
+findresource @ length dict copy @/FID undef `/CIDFontName ~ d/CIDMap ~ d
+/CIDCount ~ d/Metrics2 8 dict d CIDFontName & E/CIDFont defineresource !}bind d
+/T42CIDCPR{/CIDFont findresource @ length dict copy @/FID undef `/CIDFontName ~
+d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec cvx}if/! cvx/! cvx
+/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^ 0.0 0.0}}? bind
+readonly/CDevProc ~ d CIDFontName & E/CIDFont defineresource !}bind d
+/T0AddT42Char{/CIDFont findresource/GlyphDirectory get ` d E ! !}bind d
+/T0AddT42Mtx2{/CIDFont findresource/Metrics2 get ` d E}bind d/UpdateCIDMap{
+/CIDFont findresource/CIDMap get 3 1 $ putinterval}d/AddXUID{version cvi 3011
+ge{/XUID ~ d}{!}?}bind d/hfDef42CID{/CIDFont findresource @ length dict copy @
+/FID undef `/CIDFontName 2 ^ d @ type @/booleantype ne{/arraytype eq{/CDevProc
+~ d}{matrix @ 4 4 -1 $ put/FontMatrix ~ d}?}{! !}? & E/CIDFont defineresource
+!}bind d/hfDefRT42CID{/CIDFont findresource @ length dict copy @/FID undef `
+/CIDFontName 1 ^ d &/CDevProc known{[/CDevProc , @ type/operatortype ne{/exec
+cvx}if/! cvx/! cvx/! cvx/! cvx 5/^ cvx 5/^ cvx 0.0 0.0]cvx}{{! ! ! ! ! 5 ^ 5 ^
+0.0 0.0}}? bind readonly/CDevProc ~ d & E/CIDFont defineresource !}bind d
+%%EndResource
+end reinitialize
+-0.578 -0.207 1.387 0.922
+ 256 array 0 1 255 {1 index exch /.notdef put} for /TTE1CD9F20t00
+Type42DictBegin
+[<00010000000a000a000a000a6376742065146ccc000000ac000002746670
+676d2bc15a050000032000000768676c79661b44802b000058e80004e222
+68656164ce8b489100000a8800000036686865610dd60c5100000ac00000
+0024686d74785d72583900000ae4000023446c6f636116f62ad600002e28
+000023486d6178700dba0872000051700000002070726570877d61440000
+5190000007556764697200000000000000000000000005ba0019000005ba
+001900000000000000000000000000000000000000000425001900000000
+ffe700000000ffe70000000000000000fe68ffea00000000000000000000
+0000000002f5ffee05cd000002ddffee02f0000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000
+000008000000080000000000000000000000000000000000000000000000
+00000000000000000000000000d2010e012c01130000000000c8010900c8
+000000000000000000000000000000890048001bff77ffb8ffe500a4005f
+000aff5cffa1fff6000000000000000afff6000000000000000000000059
+ffa700c9000000c3000000c2008300c3000000bd000000bd007900c3006c
+00bd009100af00000000026f00ae00a6009a0000009b0094008b00cc00ae
+00a600940000000000ff000001e300000000000000000000000000000000
+00000000000000000000000000cd00cd006801ee0060008c000000000000
+0000000000000000000000a800a800a800b900cd00a80052016a0049007d
+007d0083008a00000071009b00910078000001fc0071ff8f022a006d0094
+00a0029a030a00b800ae008b018b019101d10391008c00730268027d01b0
+01dd021c033302a3026b02730152024c0021004c05e704f20098ff6800ac
+00c500850085005c0054006000b401baff1ffe680000008300bc00940094
+ff85ffae00520029061400ae00460046fe580560008f076002f20025003e
+004700500058007300a80160006000950025003e004700500058007300a8
+01600000002d005000600081009300ba0108ffd3ffaeff9106520060005c
+00b0012b012b04ba013e018507600016000a004b403f545249483b393837
+363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a19
+1817161514131211100f0e0d0c0b0a090807060504030201002c01b01843
+58456ab0194360b0462344231020b0464ef04d2fb000121b21231133592d
+2c01b0184358b0052bb000134bb0145058b100403859b0062b1b21231133
+592d2c01b01843584eb0032510f221b000124d1b2045b00425b00425234a
+6164b0285258212310d21bb0032510f221b0001259592d2cb01a43582121
+1bb00225b0022549b00325b003254a612064b01050582121211bb00325b0
+032549b0005058b0005058b8ffe238211bb0103821591bb0005258b01e38
+211bb8fff03821595959592d2c01b0184358b0052bb000134bb0145058b9
+0000ffc03859b0062b1b21231133592d2c4e018a10b146194344b00014b1
+0046e2b00015b90000fff03800b0003cb0282bb0022510b0003c2d2c0118
+b0002fb00114f2b00113b001154db000122d2c01b0184358b0052bb00013
+b90000ffe038b0062b1b21231133592d2c01b018435845646a23456469b0
+1943646060b0462344231020b046f02fb000121b2121208a208a52581133
+1b212159592d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0
+462370b101463e01b0462370b10246453ab10200080d2d2cb0122bb00225
+45b00225456ab0408b60b0022523442121212d2cb0132bb0022545b00225
+456ab8ffc08c60b0022523442121212d2cb000b0122b2121212d2cb000b0
+132b2121212d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc0
+8a8cb8100062602b0c642364615c58b00361592d2cb1000325456854b01c
+4b505a58b0032545b0032545606820b004252344b0042523441bb0032520
+4568208a2344b00325456860b003252344592d2cb00325204568208a2344
+b003254564686560b00425b0016023442d2cb00943588721c01bb0124358
+8745b0112bb0472344b0477ae41b038a45186920b04723448a8a8720b0a0
+5158b0112bb0472344b0477ae41b21b0477ae4595959182d2c208a452345
+6860442d2c456a422d2c01182f2d2c01b0184358b00425b0042549642345
+64696120b080626ab00225b00225618cb0194360b0462344218a10b046f6
+211b21212121592d2c01b0184358b0022545b002254564606ab00325456a
+6120b00425456a208a8b65b0042523448cb00325234421211b20456a4420
+456a44592d2c012045b00055b018435a584568234569b0408b6120b08062
+6a208a236120b003258b65b0042523448cb00325234421211b2121b0192b
+592d2c018a8a45642345646164422d2cb00425b00425b0192bb0184358b0
+0425b00425b00325b01b2b01b0022543b04054b0022543b000545a58b003
+252045b040614459b0022543b00054b0022543b040545a58b004252045b0
+4060445959212121212d2c014b525843b00225452361441b2121592d2c01
+4b525843b00225452360441b2121592d2c4b525845441b2121592d2c0120
+b003252349b04060b0206320b000525823b002253823b002256538008a63
+381b212121212159012d2c4b505845441b2121592d2c01b005251023208a
+f500b0016023edec2d2c01b005251023208af500b0016123edec2d2c01b0
+062510f500edec2d2c462346608a8a462320468a608a61b8ff8062232010
+238ab14b4b8a70456020b0005058b00161b8ffba8b1bb0468c59b0106068
+013a2d2c2045b00325465258b0022546206861b00325b003253f2321381b
+2111592d2c2045b00325465058b0022546206861b00325b003253f232138
+1b2111592d2c00b00743b006430b2d2c8a10ec2d2cb00c4358211b2046b0
+005258b8fff0381bb0103859592d2c20b0005558b8100063b003254564b0
+0325456461b0005358b0021bb04061b00359254569535845441b2121591b
+21b0022545b00225456164b028515845441b212159592d2c21210c642364
+8bb84000622d2c21b08051580c6423648bb82000621bb200402f2b59b002
+602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c
+6423648bb84000626023212d2c4b5358b00425b004254964234564696120
+b080626ab00225b00225618cb0462344218a10b046f6211b218a11231220
+392f592d2c2121212121212d2cb0134358031b02592d2cb0134358021b03
+592d2cb00a2b2310203cb0172b2d2cb00225b8fff038b0282b8a102320d0
+23b0102bb0054358c01b3c59201011b00012012d2c4b53234b515a58381b
+2121592d2c01b0022510d023c901b00113b0001410b0013cb001162d2c01
+b00013b001b0032549b0031738b001132d2c4b53234b515a5820458a6044
+1b2121592d2cb0024354584b53234b515a58381b2121591b21212121592d
+2c4b53234b515a58381b2121592d2c4b5458381b2121592d2c4b52587d1b
+7a592d2cb1020042b123018851b1400188535a58b910000020885458b202
+010243604259b12401885158b920000040885458b202020243604259b124
+01885458b2022002436042004b014b5258b2020802436042591bb9400000
+80885458b202040243604259b94000008063b80100885458b20208024360
+4259b94000010063b80200885458b2021002436042595959592d00010000
+00016148e1f6c9625f0f3cf5001b080000000000aff53caf00000000b8f4
+5fe9fb5cfe520b170760000000090001000100000000000100000760fe52
+00000ab3fb5cfa7a0b170001000000000000000000000000000008d10258
+0032000000000239000002200000023900b602d70054047300170473004e
+071d0081055600580187005c02aa007b02aa004a031d004204ac00710239
+00b602aa0042023900b6023900000473005c047300e30473003f0473005a
+0473001f047300560473005c047300620473005604730056023900b60239
+00b604ac007104ac007104ac00710473005e081f00730556fffe055600a4
+05c7006005c700a4055600a404e300a40639006005c700a4023900bc0400
+0037055600a4047300a406aa00a405c700a406390060055600a406390060
+05c700a40556005c04e3002d05c700a40556000c078d00190556000a0556
+000a04e300250239008b023900000239002103c1004a046afff402aa0056
+0473004e0473008b04000048047300480473004802390010047300480473
+008b01d3008b01d3ffb80400008b01d3008b06aa008b0473008b04730048
+0473008b0473004802aa008b0400003f02390023047300870400001b05c7
+000a0400000e0400001b0400002902ac0039021400bc02ac003104ac0058
+0556fffe0556fffe05c70060055600a405c700a40639006005c700a40473
+004e0473004e0473004e0473004e0473004e0473004e0400004804730048
+04730048047300480473004801d3007901d3ffec01d3ffac01d3ffd50473
+008b04730048047300480473004804730048047300480473008704730087
+0473008704730087047300500333008504730071047300310473005602cd
+0068044cfffe04e3008b05e5000005e500000578003202aa00e302aa003f
+04ac0071080000000639005004ac005c04ac007104ac007104ac00710473
+00020473008b03f4003305b4007b069600a4046400000231ffb202f6002b
+02ec002d06250071071d004e0473004804730062023900b604ac00710464
+001404730042046400330556fffe0473008d0473008d0486005b0556fffe
+0556fffe0639006008000060078d00480258fff404b0fff402aa005402aa
+005401c7007d01c7007d04ac007103f4002e0400001b0556000a0156fe54
+0473004c02aa005a02aa007f040000100400001004730050023900b60239
+00b603220090080000190556fffe055600a40556fffe055600a4055600a4
+023900ac0239ffdf023900080239001f06390060063900600639006005c7
+00a405c700a405c700a401d3008b02aa001702aa000602aa001d02aa002d
+02aa00f802aa00a202aa0085037a009d02aa00b602aa00170473000801d3
+000c0556005c0400003f04e3002504000029021400bc05c7000204730048
+0556000a0400001b055600a40473008b04ac007104ac00a602aa006a02aa
+001902aa002106ac007f06ac007f06ac003504e300000639006004730048
+023900bc0556005c0400003f05c700600400004805c70060040000480473
+00480400fff4023900b60556fffe0473004e0556fffe0473004e05c700a4
+0513004805c70002055600a404730048055600a404730048047300a401d3
+0047047300a40255008b047300a402f3004205c700a40473008b05c700a4
+0473008b063900600473004805c700a402aa008b05c700a402aa002b0556
+005c0400003f04e3002d0239002304e3002d02d0002305c700a404730087
+05c700a40473008704e300250400002904e300250400002904ae00a40639
+006006790060049c0048047300480400004804ae00480400002105310048
+0400fff4047200b602f6004c09e9008f063900bc03a6008b0568002102aa
+00e502aa0056071d00810296000f04d5009202d6008302d6008304d500b1
+02d600700556fffe0473004e05c700600400004805c70060040000480556
+00a404730048055600a404730048055600a4047300480639006004730048
+0639006004730048063900600473004805c700a40473008b05c700140473
+00000239ffce01d3ff9b0239ffe501d3ffb20239fff501d3ffc2023900bc
+01d3008b0400003701d3ffac056800a40400008b0400008b047300a401d3
+004205c700a40473008b05c700a40473008b063900600473004806390060
+0473004805c700a402aa005a0556005c0400003f04e3002d0239002305c7
+00a40473008705c700a40473008705c700a40473008705c700a404730087
+078d001905c7000a0556000a0400001b0200008b0556fffe0473004e0800
+0000071d004e0639005004730048023900b6078d001905c7000a078d0019
+05c7000a078d001905c7000a0556000a0400001b01c7007d0400fff40473
+00310473004806ac007f06ac003606ac003606ac006d02aa00fc02aa0085
+02aa00ee034800370556fffe0646003306b7003303290033069a00000631
+0000069a0000033300290556fffe055600a40575000c055600a404e30025
+05c700a4023900bc055600a40556fffe06aa00a405c700a4053f006d0639
+006005c700a4055600a404e5006004e3002d0556000a0556000a0679005e
+06390066023900080556000a049c0048040000480473008b01ec00790473
+00870481008b0452001b03e100480473008b0473005c01ec008b0400008b
+0400001b0473008b0400001b03e10048047300480491008b044800480473
+0087042d000e058500870585004802520008047300870473004804730087
+05850048055600a40666002d048900a405bc00600556005c023900bc0239
+00080400003707ae000a07ae00a40666002d055600a4051f000805c700a4
+0556fffe053d00a4055600a4048900a406330023055600a4073500060514
+005a05c700a405c700a4055600a405a4000a06aa00a405c700a406390060
+05c700a4055600a405c7006004e3002d051f000806cb00600556000a05fc
+00a40579007706e100a4071700a4063d0000071000a4053d00a405bc005e
+080c00a405c7005c0473004e0496005e043f008b0310008b04aa00000473
+004805aa0004040000230479008b0479008b0400008b0491000a05b6008b
+0473008b047300480473008b0473008b0400004803aa00250400001b0698
+00480400000e0498008b0444005e066a008b068f008b04f6000005bc008b
+042f008b0400001b05f4008b0456003504730048047300000310008b0400
+00480400003f01d3008b01d3ffd501d3ffb806e9000a0698008b04730000
+0400008b0400001b0473008b047300a403b8008b046afff407fc008f0473
+008b02aa002302aa002102aa006d02aa002101d3008b0556005c0400003f
+0473000001480060028f004e028f005e028f005e0148006001ec004e01ec
+005801ec007101ec005601480060028f004e014800600148007502140039
+01ec007101cf0091014800600148ff79023900b604cd0083048f003b035c
+00170429001404cd0098028f004c02cd001404cd009804cd003b028f004c
+0429003f0429005a0429004804cd005004cd003b02cd004a02cd003b04cd
+005004cd002d04cd00870466006f043d003b0466003b047b00980400002d
+0550009804cd005404cd003704cd003704cd003702000060037100600566
+0077028fffa20429003f0429003f0429ff790429ff7904cd002d05500098
+05500098055000980550009804cd008304cd008304cd0083048f003b035c
+00170429001404cd0098028f003d02cd001404cd003b028f003d0429003f
+0429005a0429004804cd003b02cd003b04cd005004cd00870466006f0466
+003b047b00980400002d0550009804cd0054028f004c048f003b0429005a
+0466006f04cd00290000ffdc0000ff250000ffdc0000fe51014800600639
+00600473004805c700a40473008702aa00cf02aa00f802aa005602aa00e3
+02aa001702aaff0c02aa001702aa000402aa002d02aa002d02aa002d02aa
+000402aa00cf02aa000402aa002d02aa002b02aa002b02aa001902aa0017
+0556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe0473
+fff20556fffe0473004e0556fffe0473004e0556fffe0473004e0556fffe
+0473004e0556fffe0473004e0556fffe0473004e0556fffe0473004e0556
+fffe0473004e055600a404730048055600a404730048055600a404730048
+055600a404730048055600770473fff1055600a404730048055600a40473
+0048055600a4047300480239009801d30098023900bc01d3008b06390060
+0473004806390060047300480639006004730048063900600473fff20639
+006004730048063900600473004806390060047300480639006004730048
+063900600473004806390060047300480639006004730048063900600473
+004805c700a40473008705c700a40473008705c700a40473008705c700a4
+0473008705c700a40473008705c700a40473008705c700a4047300870556
+000a0400001b0556000a0400001b0556000a0400001b0473004801df00b2
+01df007501df002b01df007501f4ff8501f4ff8501f4ff850458ff850458
+00560458ff85045800560458ff850458005604d7ff8504d7ff8506c3ff85
+045801310458013f0458005a0458003d0458007504580048045800480458
+002d0458002b0458005c06c3ff850458ff850323ff8503a000560458ff85
+0323ff8503a000560252ff85025eff85022500ac0252ff85025eff850327
+ff8501baff850323ff8501f4ff85039aff850323ff85030e004801f4ff85
+04bc001f030e004804bc001f026600cd01f4ff85045c000c04c3003501df
+000001df000001df0000045c000c04c30035045cfff604bc001f022500ac
+04c3001f026600cd04730062034c008901df002701df00710364000001df
+0071051f001f01df00ae05b80050027b003d05b8005005b8005004580056
+045800560458005602b8000a02b8000a03e1005203e100520698000a0698
+000a08b8000a08b8000a04a4ff8504a4ff85045c0052045c005201baff85
+0652005004a8002704cd00330414002902b8001f043d0033027b003d0364
+0000051f001f051f001f01ae000001df000001ae000001ae000001ae001b
+01ae000001df00000133000a045c000c04c3003501cb006801c7001f0266
+00e9026600620266005601f4ff850252ff85025eff8505b8005003df0093
+0000fb5c0000fb5c0000fb5c0000fb5c0000fe000000fd3b0000fc4c0000
+fd0a0000fd2d0000ff170000fdaa0000fda80000fe850000fe9605c3005e
+0000fbdf0000fd1b0000fbfa0000fe020000fdf00000fc4c0000fd7f0000
+fd2d045e005e047f002d04ac002d047f0056047f0056055c002d03640006
+03df0050051f0050047f002d04ac002d05c3005e05c3005e04ac005004ac
+005003df00930571002d062100560635005e047f0056047f0056045e005e
+049a00500404009304f6005004ac005004ac0050047f0081047f00810537
+00500537005004ac005004ac002f0400008103df0093045e005e03df0050
+04ac005003df0050047f0056051200500431005004db0050053700500431
+0050045e005e04000050039a004a0000fcfe035c001f035cfe620000fc73
+0000fc730000fc730000fc730000fee10000fe000000fee9031f00b604fe
+009a0248008b048f008b035c0010035cffc903df0000035c001f04830050
+0000fd100000ff190000fe5e0000fda80000fec10000fe960000fe620000
+fe680431006204bc006004bc005c04fe000e04fe007f04fe006004fe0060
+04bc001704fe003504fe006004fe004a0527005006d100350000fee10000
+fe000000fee901baff8505b8005001f4ff8504580056045800560458ff85
+03e1005204c100330327ff8504c100330327ff85051f001f04bc001f01f4
+ff85030e0048027b003d045801310458013f0458005a0458003d0458003d
+0458004a045800c90458002d0458002b0458005c04e3002d023900230556
+00a40473004805c700a40479008b04140029023900bc0400003701d3008b
+01d3ffb80489003a031000300786000605cf000405aa00a40447008b0556
+00a40400008b05fc00a4049a008b0556000a0400001b0556000a0400001b
+05a5000a043a000e057900770444005e057900a40473008b063900600473
+00480639006004730048080000000000ffdc0000ff160000ffdc0000ff20
+0000ffdc0000ff200197000005b8005001f4ff8502b8000a03e10052043d
+00330440006401f4ff8503fdff85044000640440006406d9001306d90013
+06d9001306d9001301ba00280493004a031d0042065200500252ff85025e
+ff8501df000001df000006750048027b003d0000ffdd0000fe870000fefd
+047300690568005c05c7006005c7006006aa008b05c70000098700a4078d
+00000556000004e3002d0800002901ae000501ae002a026600ea02660056
+0266006201ae002e04a8002701ae001001cb006801cb006801df000501df
+000501df002a01df002a01df002a01df002a028000ae028000b203640000
+03640000057e001f04bc001f05b8005001f4ff8505b8005001f4ff8505b8
+005001f4ff8505b8005001f4ff8505b8005001f4ff8505b8005001f4ff85
+04580056045800560458ff8504580056045800560458ff85045800560458
+00560458ff8504580056045800560458ff8504580056045800560458ff85
+04580056045800560458ff8502b8000a02b8000a02b8000a02b8000002b8
+000a02b8fffc02b8fffc02b8000803e1005203e1005203e1005203e10052
+03e1005203e1005203e100520698000a04d7ff850698000a04d7ff850698
+000a04d7ff8508b8000a06c3ff8508b8000a06c3ff8504a4ff85045c0052
+03a000560458ff850323ff8506520050065200500252ff85025eff850652
+00500252ff85025eff85065200500252ff85025eff85065200500252ff85
+025eff8504a8002704a8002706d9003306d9ff7904c100330327ff8504cd
+00330327ff8504cd00330327ff8504cd00330327ff8504c100330327ff85
+04c100330327ff8504c100330327ff8504c100330327ff8504c100330327
+ff660414002901baff850414002901baff850414002901baff8504140029
+01baff85043d003301f4ff85043d0033043d003301f4ff85043d003301f4
+ff8504580056045800560458ff8503640000036400000364000003640000
+0364000003640000036400000364000005f3000505900005051f001f04bc
+001f01f4ff8503640000051f001f04bc001f051f001f04bc001f0000fe46
+0000ff6e0000ff590000ffb70000fec308fc003208ad00320000ffb50000
+ffb60000ff410000ff920000fec30000ffbf0168003202cc00320000fea2
+0000ff5a04cd00320000ff580000ff580000ff920698000a04d7ff8508b8
+000a06c3ff85045c005203a000560458ff850323ff85034c008902b8001f
+02aa001d02aa001d02aa001d02aa001d02aa003f02aa003f02aa000402aa
+000402aa000402aa000402aa00ca02aa00e302aa001702aa001702aa001d
+02aa001d055600a4047300480556fffe0473004e055600a40473008b0556
+00a40473008b055600a40473008b05c700600400004805c700a404730048
+05c700a40473004805c700a40473004805c700a40473004805c700a40473
+0048055600a404730048055600a404730048055600a404730048055600a4
+04730048055600a40473004804e300a402390010063900600473004805c7
+00a40473008b05c700a40473008b05c700a40473008b05c7007104730053
+05c700a40473008b0239ffce01d3ff9b0239000701d3ffd3055600a40400
+008b055600a40400008b055600a40400008b047300a401d3008b047300a4
+01d3ffb1047300a401d3ffb1047300a401d3ffac06aa00a406aa008b06aa
+00a406aa008b06aa00a406aa008b05c700a40473008b05c700a40473008b
+05c700a40473008b05c700a40473008b0639006004730048063900600473
+004806390060047300480639006004730048055600a40473008b055600a4
+0473008b05c700a402aa008b05c700a402aa008b05c700a402aa006605c7
+00a402aa001d0556005c0400003f0556005c0400003f0556005c0400003f
+0556005c0400003f0556005c0400003f04e3002d0239002304e3002d0239
+002304e3002d0239ffed04e3002d0239001705c700a40473008705c700a4
+0473008705c700a40473008705c700a40473008705c700a4047300870556
+000c0400001b0556000c0400001b078d001905c7000a078d001905c7000a
+0556000a0400000e0556000a0400000e0556000a0400001b04e300250400
+002904e300250400002904e30025040000290473008b0239000d05c7000a
+0400001b0473004e0200008b049c0048049c0048049c0048049c0048049c
+0048049c0048049c0048049c00480556fffe0556fffe060a0000060a0000
+05e2000005e20000059c0000059c00000400004804000048040000480400
+0048040000480400004805eb000005eb0000073000000730000007300000
+073000000473008b0473008b0473008b0473008b0473008b0473008b0473
+008b0473008b065c0000065c000007a1000007a1000007a1000007a10000
+075900000759000001ec008b01ec008b01ecffdb01ecffdb01ec000301ec
+000301ecff9b01ecff9b02b6000002b6000003fb000003fb000003fb0000
+03fb000003b3000003b30000047300480473004804730048047300480473
+004804730048063900000639000007da000007da00000776000007760000
+047300870473008704730087047300870473008704730087047300870473
+0087064c00000778000007ca000007490000058500480585004805850048
+0585004805850048058500480585004805850048063900000639000007da
+000007da000007760000077600000736000007360000049c0048049c0048
+04000048040000480473008b0473008b01ecffeb01ec0078047300480473
+004804730087047300870585004805850048049c0048049c0048049c0048
+049c0048049c0048049c0048049c0048049c00480556fffe0556fffe060a
+0000060a000005e2000005e20000059c0000059c00000473008b0473008b
+0473008b0473008b0473008b0473008b0473008b0473008b065c0000065c
+000007a1000007a1000007a1000007a10000075900000759000005850048
+058500480585004805850048058500480585004805850048058500480639
+00000639000007da000007da000007760000077600000736000007360000
+049c0048049c0048049c0048049c0048049c0048049c0048049c00480556
+fffe0556fffe0556fffe0556fffe0556fffe02aa010302aa00f902aa0103
+02aa000602aa00060473008b0473008b0473008b0473008b0473008b065e
+0000064d000006cf000006be000005c700a402aa004602aa006e02aa0006
+01ecffc201ecffb201ecff7e01ecff7e01ecff9b01ecff9b0239fff60239
+ffe6032900000318000002aa004602aa006e02aa00060473008704730087
+04730087047300870491008b0491008b04730087047300870556000a0556
+000a06a6000006e7000005eb0000034800370348003702aa005605850048
+058500480585004805850048058500480708000006930000070800000693
+00000639006602aa00e302aa01030000fec30000fec80000fdf40000fed8
+0000ffa40000feea0000ff4c0000fe9e0000fec30000ffbf0000ff3d0000
+fe9e0000fed80000fed80000ffae0000ffae0000ffae000000640000ff47
+0000ff480000ff440000ff440000fe87000000000000ffa60000ff440000
+ff440000ff440000fec80000ff2d000000000000feeb0000ff4c0000ffae
+0000ff350000ff240000ffbf0000fe870000febb0000fec30000fec30000
+fed80000fed80000feb10000fec80000fdbf0000fdf40000feb10000fec8
+0000fdbf0000fe870000fee30000ffa60000fe870000ff440000feba0000
+ff230000ff9a0000fdf40000feb10000ffae0000fe940000ffa40000fe87
+0000fdf40000ff3d0000ff440000feb10000feb10000feb10000ff030000
+ff440000ff530000ff530000ff53045cffee04c30016045c000c04c30035
+045c000c04c30035045c000c04c30035045c000c04c30035045c000c04c3
+0035045c000c04c30035045800790458003c0473000a05fd0000053d00a4
+0473008b053d000d0473000305c7006905c700600400004805c70002066e
+0000053d005104730048047300480556006d0514006a04e3ffd106390060
+0556000c0724008b01d3008b02390014055600a40400008b01d300140400
+001b06aa008505c7ffd10473008b06390060070e006005a0004805fd0000
+0473008b055600a40556006a0400005004e50060035600000239002304f7
+00140239002304e3002d0625007105c700a4062c000a0400001b04e30025
+04000029046c001f046c006003c6004803c600330473003f0473002f03a9
+0020044e0023046c008b021400bc0214002605d200c1023900b60a5b00a4
+097800a4084c0048086000a4064a00a40363008b097800a4073e00a40607
+008b0556fffe0473004e0239ffdf01d3ffa9063900600473004805c700a4
+0473008705c700a40473008705c700a40473008705c700a40473008705c7
+00a404730087047300480556fffe0473004e0556fffe0473004e08000000
+071d004e06390060047300480639006004730048055600a40400008b0639
+0060047300480639006004730048046c001f03c6002b01d3ffac0a5b00a4
+097800a4084c00480639006004730048085b00a4046c008b05c700a40473
+008b0556fffe0473004e0556fffe0473004e055600a404730048055600a4
+047300480239ff6601d3ff3e0239fffa01d3ffc806390060047300480639
+00600473004805c700a402aa000605c700a402aa007c05c700a40473006a
+05c700a404730087040200420374002305c700a40473008b057900a404a8
+00420446003904e30025040000290556fffe0473004e0639006004730048
+0639006004730048063900600473004806390060047300480556000a0400
+001b02aa001d02aa001d02aa001702aa003f02aa00040473008c049c0048
+049c00480473008b0400001b0400000004730048047300480473004805db
+004804000048040000230552002304460048026200100473004804730048
+04ae004b0400001b04e0001d047300870473008b0473008b01d3000001ec
+008b01d3008b029e0000024e000001d3008b0486008b06aa008506aa0085
+06aa008b0473ffb80473008b0455008b0473004805c50048058500480473
+004802aafff802aafff802aafff802aa008b02aa008b0239008b0239fff8
+0447008b0447008b0400003f0231ffb2026200100231ffcf039900000239
+0012023900230473000004c50048043b00870400001b05c7000a0400001b
+03ce000004000029046e002903c6002b03c6002c0400001b040000480400
+001b0400004806390060043f008b0446004804ae004b0473008b02ff000a
+040000080364008b047300480400001b04000048078e00480718004807fc
+004805b6002303930023060c0023061900100568008b04f0008b03e2001e
+048200880481008b0473008705cd000a0767fffd05cd000a047300480585
+004804970014063900600473004805c700600400004804e300a403fc008b
+04ff0000043c0032060d000a049d000006aa008506aa0085057900770473
+0087057900a4044e000a0556006a0556006a04e0000504e0000505e50060
+0476004803c70014034f0028049700140496005e0400004801d3ffb80639
+006003b6004803b6001b095f006005e8001b0600000a04c0000a079800a4
+05c2008b054a000d03fe001b06f800a4057a008b0735000805aa000508f7
+00a4076c008b0514006d0400004a0679005e058500870639006004730048
+0604000c04a4001b0604000c04a4001b0ab3006008d300480711005f0568
+0048095f006008800048095f006005e8001b05c700600400004803f80014
+02aafffa02aa000002aa000002aa000007bd000a07bd002a05c700a40479
+008b053d000f042f0008055600a40473008b048900a40426008b0514005a
+040000230556001804000008069d000a04d1000a071200a40543008b0847
+00a406c6008b05c700600400004805c700600400004804e3002d03aa0025
+0744000a0563000a057900770444005e070b000a053b000a070b000a053b
+000a023900bc0735000605aa0004055600a40400008b05a4000a0491000a
+05c700a40473008b05c700a40473008b057900770444005e06aa00a405b6
+008b0556fffe0473004e0556fffe0473004e08000000071d004e055600a4
+0473004806390060047300480735000605aa00040514005a040000230443
+001f03c6002b05c700a40479008b05c700a40479008b0639006004730048
+063900600473004805bc005e0400001b051f00080400001b051f00080400
+001b051f00080400001b057900770444005e071000a405bc008b053d0051
+0473004807d100510724004807e2006d06f0004a0582006d0468004a0838
+000a073e000a085b00a4071f008b0639006004ae004b0609002d056b0025
+02aa001d02aa001702aa003f02aa001d02aa000402aaff8c04c1003304c1
+0033028f004c0000fed802fe000004cd0037045cffc904c3fff100000000
+000000280000002800000028000000380000009800000102000002a20000
+0412000005600000070e0000076a000007da0000084c000008f000000976
+000009ea00000a3600000a7200000ae400000b9400000bfe00000cc40000
+0dda00000e8000000f7400001064000010fe0000123a0000132e0000137c
+00001402000014b000001520000015d0000016b8000018e400001a1a0000
+1b4600001c6a00001d2600001db800001e3400001f8600002024000020a0
+0000215400002280000022da0000243a000024d8000025fe000026c80000
+28cc00002a1e00002bd200002c4200002ce200002dce00003086000031b8
+000032c60000335e000033bc0000342e00003484000035400000356a0000
+35c40000374c0000385e0000394c00003a4e00003b8a00003c5e00003de8
+00003e9200003ee800003fb2000040d00000411000004228000042da0000
+43ce000044ea0000460400004682000047e8000048ae0000496800004a68
+00004c5400004e0200004f7200005016000050fa0000515a000052380000
+52ec0000534c00005388000054f2000055320000558c000055da0000562c
+0000565a0000568a000056bc000056f60000572e000057660000589a0000
+58c8000058f4000059220000596c000059e400005a5000005a9400005b0a
+00005b2e00005b5a00005b8600005bb400005c0600005c3800005c660000
+5c9200005cb600005d0800005da200005e380000600e000061620000631a
+000063a40000642e000065680000670a0000689c000069f400006a500000
+6a9800006b7400006c6200006df200006eec00006f7c0000704600007112
+000072820000732c00007416000074c2000075120000757c000076060000
+7712000077ba000078a400007a6a00007b8a00007c9400007d0600007d84
+00007e1000007f0000007fda000080ce00008148000081c6000082500000
+8296000082f40000834e0000846c000085f20000864a000086aa00008770
+0000883a000088a200008918000089a400008a3e00008a7a00008ac60000
+8b3a00008c8200008cfe00008d7e00008e7e00008f6a000090300000907a
+000090f0000091ac00009390000093e00000942600009466000094b80000
+94fa0000953600009576000096180000965c000096a2000097080000974e
+00009796000097f00000983200009868000098d00000994c000099740000
+99fa00009a4a00009ad000009b4600009be800009c5800009ce600009dce
+00009e9e00009ee400009f1200009f5600009f7a00009ff80000a0e20000
+a21e0000a25e0000a28c0000a3700000a4840000a4d80000a5ca0000a62e
+0000a6fc0000a7dc0000a8700000a9080000a9a80000aa420000aa8a0000
+aab40000aaf00000aca60000ae180000ae5e0000ae8c0000aed40000aefe
+0000b0380000b0760000b0860000b0c60000b0f20000b2840000b4400000
+b4860000b4ca0000b4da0000b5c40000b7660000b7aa0000b7d40000b818
+0000b86c0000b91e0000b9ba0000b9d20000b9ea0000ba2c0000ba540000
+ba9e0000bace0000bb180000bb460000bb8a0000bbb80000bbfe0000bc3a
+0000bc7a0000bca20000bd7e0000bebc0000bf000000c01c0000c05a0000
+c0980000c0f00000c1240000c1680000c1940000c1ca0000c1ee0000c244
+0000c35c0000c4820000c5ce0000c6ec0000c7ee0000c8be0000c9640000
+ca740000caba0000cb060000cb860000cd5a0000cd8c0000cdb40000cdee
+0000ce200000ce820000cff40000d0ee0000d1440000d1780000d1c60000
+d2180000d2d00000d43e0000d47a0000d4be0000d4e20000d5180000d53c
+0000d6080000d7760000d7b80000d7dc0000d8a00000d8d20000d91e0000
+d94a0000d98c0000d9b00000db580000dd080000dd4c0000dd900000de72
+0000df6a0000dfe80000e0240000e0c20000e1080000e1860000e1c20000
+e2800000e32e0000e37c0000e44e0000e5e00000e7740000e8860000e95a
+0000ea2e0000ea5c0000ea8c0000eb660000ec4c0000ec920000eccc0000
+ed0c0000ed300000ed580000ee460000ee8c0000eeb40000ef500000f03e
+0000f07e0000f0a20000f0f20000f1280000f1680000f18c0000f28c0000
+f3bc0000f4000000f4240000f4680000f48c0000f4e80000f6b60000f8b8
+0000f8fa0000f9220000f9680000f9940000f9de0000fa200000fa440000
+fa7a0000faa20000fae60000fb160000fb560000fb7a0000fbe00000fc1e
+0000fd800000fe460000fefe0000ffb800010072000101240001018c0001
+02000001023a000102e000010336000103ba0001042c000104b600010512
+00010562000105ae00010624000107560001087c00010942000109d80001
+0a7200010b1000010b8e00010cc000010d8200010ed400010f6e00010ffc
+000110fe00011184000112520001131400011396000114a8000115dc0001
+16ae000117b2000118900001190a0001193600011976000119a6000119fe
+00011a4a00011b5400011c7800011d9200011e5a00011f3e00011fc40001
+20ec0001224c0001231c0001241c00012568000125780001264c0001272e
+000127be0001294600012a3600012b2200012b8c00012bd800012c060001
+2c4000012c9600012cf200012e1600012e5a00012f86000130f00001317c
+0001324000013250000133440001343a0001353000013590000135ea0001
+3688000137c200013882000139b400013a1600013ae200013b8600013ce6
+00013e1a00013ede00013f1c000140420001410c000142680001430c0001
+44040001448e0001456000014660000146d20001485c0001496c00014aa6
+00014b5400014c0a00014cc400014da800014e9600014f2600014fec0001
+513c0001528a000153ac0001552c0001562800015700000157740001584e
+0001598c00015b1400015c1c00015cda00015d2200015e2a00015eee0001
+600e000160b00001619c0001621e0001633e000164060001648600016658
+000167d20001693e000169e200016a9c00016b5600016c4400016d020001
+6d6400016dfa00016f2e0001702600017120000171740001728a000172b0
+000173c6000173d6000173e60001748000017490000175b8000176900001
+776a0001778e000177cc00017846000178d40001794a0001798000017abc
+00017b1200017baa00017c7400017cf800017de400017e2400017e480001
+7e6c00017fce00018070000181f6000182ec000183e600018450000184f6
+000185f20001864a000186b00001871c0001882600018890000188e20001
+892a0001897c000189d600018a4800018aae00018b1200018c7600018d0a
+00018dd000018e3a00018ee600018f6600018fda00019078000191760001
+91fc0001929000019320000193fe000194a8000195940001962a000196ae
+00019780000198440001990e000199ee00019af200019c3600019d4c0001
+9dc600019ec600019f7a00019fcc0001a0280001a0920001a0ce0001a132
+0001a2100001a2340001a2660001a2a40001a2ca0001a3060001a3dc0001
+a4000001a4220001a4680001a4ac0001a4d00001a4f40001a5400001a568
+0001a58e0001a5ba0001a5de0001a6020001a6340001a6580001a6840001
+a6ac0001a6d40001a6fc0001a7200001a7460001a76a0001a7c20001a810
+0001a8460001a87e0001a8a60001a8dc0001a9000001a9240001a94c0001
+a9740001a99c0001aaa00001aad00001ab800001abe00001ac420001acac
+0001ae020001af3c0001b0240001b10e0001b17a0001b1a20001b1fc0001
+b2580001b2e40001b3720001b44a0001b5160001b5a40001b6320001b700
+0001b7c20001b84e0001b91a0001b9c40001ba700001bb660001bc420001
+bd100001bd340001bd5c0001bd840001bdb20001be020001be3e0001be8e
+0001bec20001bf160001bf4c0001bf820001bfb60001c0140001c05a0001
+c0800001c0ae0001c0d40001c1020001c1280001c1560001c17c0001c1aa
+0001c1e00001c2200001c2440001c2680001c28c0001c2b00001c2f00001
+c3140001c3620001c39a0001c3e80001c41c0001c46e0001c4a20001c4e4
+0001c5140001c5700001c5ae0001c5e40001c61e0001c6400001c6620001
+c6860001c6aa0001c6d20001c6fa0001c7680001c7a00001c81e0001c84e
+0001c8c40001c8f00001c9180001c93e0001c9ba0001c9f80001ca3e0001
+ca6a0001caa60001cada0001cb020001cb320001cb6e0001cb940001cbb8
+0001cbdc0001cc000001cc240001cc4c0001cc700001ccae0001ccdc0001
+cd140001cd400001cd680001cd940001cdce0001cdfc0001ce200001ce44
+0001ce680001ce8c0001cec00001ceee0001cf240001cf4e0001d0800001
+d0ec0001d17e0001d2060001d2680001d2940001d2cc0001d3080001d33a
+0001d3700001d4440001d5640001d5a00001d5d60001d6ca0001d7180001
+d81c0001d8ee0001d99e0001da5c0001db380001dcb80001dd660001de14
+0001df000001dfd20001e0a60001e0f80001e1c60001e2b20001e40c0001
+e44e0001e4a20001e4ee0001e5240001e56e0001e6080001e6460001e696
+0001e7c60001e8320001e9120001e9440001ea800001eba80001ec560001
+ec820001ee520001eea20001efe00001f0780001f0dc0001f20e0001f2fe
+0001f3f00001f5a20001f6ae0001f7020001f75c0001f7b60001f7e80001
+f8820001f8cc0001f9a00001fad00001fb960001fbf40001fc900001fcca
+0001fd380001fd720001fdce0001fdfa0001fe4a0001fe820001febc0001
+feea0001ffe40002001c000200c60002010a00020190000201da000202fc
+0002034c00020496000204e2000205bc000205fc000207300002076c0002
+07ac000208b2000209cc00020af600020ba800020c8000020d5200020e32
+00020ee00002103a0002109a0002112600021250000212e0000213400002
+14160002147800021540000215e80002164c000216aa0002175c000217ee
+0002181a00021868000218d40002193400021a1800021b1e00021b940002
+1d5a00021dce00021e6400021f6a00022052000220940002219e00022328
+0002239400022476000224ba000225c400022734000227a0000228880002
+2a4200022b1600022bba00022d1a00022d5e00022e5200022f8c0002302c
+0002310c000231ec00023352000234ec00023640000237b8000239980002
+3a8000023bae00023d4400023f200002413200024338000245a6000247b2
+00024a0400024d2e00024f160002515a0002534a000254da0002566a0002
+57c00002590200025a2000025b9e00025ca400025dae00025ec600025fe2
+0002612000026262000263ac00026504000266340002676a000268ae0002
+6a3800026b8600026c8200026e600002704a0002722e000273bc000275aa
+00027716000278f000027a2600027bae00027c6e00027cec00027dfc0002
+7e6a00027efa00028006000280f2000281a400028288000282e60002834e
+000284680002853a0002868a000287ee0002896200028a6e00028aee0002
+8c4200028d9800028dd800028ed400029016000290ae0002919000029230
+000293460002947600029514000296760002982c000299c000029b3c0002
+9d2800029e980002a07a0002a23a0002a3c60002a52c0002a69a0002a75c
+0002a86a0002a8ca0002a8da0002a9d40002aab80002ac2c0002adec0002
+af440002af9c0002b0ec0002b0fc0002b2900002b4020002b4120002b422
+0002b44e0002b4900002b4e80002b4f80002b5080002b5180002b5280002
+b63c0002b6f00002b7ec0002b7fc0002b80c0002b81c0002b8400002b862
+0002b8a40002b8d00002b9100002b9340002b9440002b9540002b9640002
+b9740002b9840002ba1a0002bac60002bbe60002bd220002be1c0002bede
+0002c00e0002c1060002c1a40002c2480002c2580002c3060002c3dc0002
+c4b80002c5a00002c6820002c77a0002c87a0002c93a0002c94a0002ca48
+0002cb340002cc1c0002ccf20002d0fe0002d1440002d18e0002d1be0002
+d1f60002d2260002d26c0002d31c0002d34e0002d3a60002d3e60002d42c
+0002d4d40002d5760002d62a0002d78a0002d7d20002d8160002d8da0002
+d9640002d9980002d9ce0002d9fa0002daae0002db560002dca60002dcf4
+0002dd4a0002df5c0002e0b20002e2a40002e3840002e3ae0002e4b00002
+e5760002e6a20002e7b40002e9940002eaca0002ec2c0002edd20002edfa
+0002f0340002f1340002f27a0002f4ac0002f5900002f6780002f6f40002
+f7600002f80a0002f8700002f9400002f99c0002f9ae0002f9c00002fa38
+0002fab00002fb380002fbc00002fbf40002fc280002fc700002fd7a0002
+fdac0002fe040002fe3c0002fe820002feaa0002fee00002ff120002ff44
+0002ffa200030008000300420003007e000300c6000301120003014e0003
+018c000301d000030214000302560003028e000302c6000303080003033c
+00030390000303c200030402000304480003047a000304be000305020003
+05480003059000030794000307d400030810000308400003089e000308e2
+0003091800030966000309b400030a0600030a5800030aae00030ae20003
+0bca00030c2a00030c7e00030cda00030d3600030d9800030ddc00030e16
+00030e9200030f1000030f4c00030f8800030fe0000310380003107a0003
+10ca0003111e00031160000311b8000312a6000312d80003130800031338
+00031392000313e60003144c00031484000314ba000314f0000315440003
+1592000315e800031632000316820003178e00031884000318ec00031954
+00031984000319be000319fa00031a4400031a7a00031ab000031b1a0003
+1b8400031bbc00031bfc00031c2200031c4800031c7a00031cb000031d0c
+00031d9e00031dfe00031e5e00031eb000031f020003200c000320e20003
+21d800032210000322400003228a000322b0000322f40003235200032394
+000323d00003240a000324400003247c000324be000325ae000325e20003
+26240003265a0003268e000326d800032728000328c200032a1800032a58
+00032a9000032adc00032b1800032b5200032d6200032db000032fd60003
+3126000331bc000332b80003330a0003343000033676000339520003398a
+000339b600033a3400033ac200033aee00033b5800033c2800033cf60003
+3d0800033dac00033fbe00033fec0003405000034094000341000003417a
+000341da00034240000342a00003431600034384000343e80003450a0003
+45f8000346a000034712000347b000034820000348d60003496800034a50
+00034af200034bbe00034c6800034d1800034d9a00034e5200034ef00003
+4f860003500c00035110000352c800035310000353680003539e000353ce
+000353f2000354160003545400035492000354d8000355060003553c0003
+557200035598000355c0000355fc00035638000356600003568c000356c8
+00035708000357300003575800035780000357a8000357e4000358200003
+58560003588c000358c4000358e80003591e0003595200035990000359b6
+000359ec00035a1c00035a4200035a6800035aa200035adc00035bc80003
+5ccc00035d0400035d3c00035d7200035da800035dd000035df800035e52
+00035e9400035ebc00035ee400035f2200035f6e00035f9400035fb80003
+60000003604600036082000360c0000360fc000361380003617c000361a2
+000361d8000362060003622c0003625200036288000362b6000362dc0003
+63020003633e0003637a000363b6000363f20003641a000364420003646c
+00036496000364be000364e60003650e0003653600036578000365a40003
+65dc0003660a000366420003667000036698000366c60003671200036750
+00036796000367dc0003681200036840000368660003688c000368bc0003
+68e40003690c000369340003697c000369ba000369f000036a3800036a5e
+00036a8200036abe00036b0000036b3c00036b7a00036baa00036bda0003
+6c1000036c4600036c8200036cbe00036ce600036d0e00036d3800036d62
+00036da200036dc800036dee00036e1400036e4200036e6800036e8e0003
+6eb400036ee200036f0800036f3a00036f6200036f9000036fb400036fea
+0003700e000370340003705800037094000370d00003710c000371540003
+717c000371a40003734200037376000373ae000373e80003741a0003744c
+00037484000374bc000375040003754e00037596000375de000376360003
+768e000376e200037738000377a8000378180003784600037874000378a6
+000378d80003790e0003794000037996000379ee00037a5000037ab20003
+7b0a00037b6000037b8e00037bbc00037bee00037c2000037c5800037c90
+00037cce00037d0c00037d6000037db600037e1600037e7600037ed20003
+7f2c00037f9000037ff80003802c0003806000038094000380c8000380fe
+0003813400038174000381b40003820400038256000382b6000383160003
+8374000383d40003842c00038488000384b6000384e40003851600038548
+00038580000385b8000386020003864e000386a6000386fe000387500003
+87a4000387d2000388040003883600038868000388a6000388e400038922
+00038960000389ba00038a1a00038a8200038ae600038b1400038b420003
+8b7400038ba600038bde00038c1600038c5000038c8a00038cd400038d1e
+00038d8000038de200038e3a00038e9400038f0200038f7000038fa40003
+8fda0003900a0003903e00039072000390a4000390e40003911800039148
+00039176000391a6000391dc0003920a0003923a0003928c000392e00003
+932c00039378000393cc0003942000039484000394ea000395440003959e
+000396060003966e000396d20003973c000397b40003982c000398680003
+98a4000398e4000399240003996a000399b0000399fe00039a4c00039ab2
+00039b1a00039b8600039bf200039c5c00039cc400039d3c00039db40003
+9df200039e3000039e7200039eb400039efe00039f4800039f9400039fe0
+0003a0440003a0a80003a11e0003a1940003a1fa0003a2620003a2e00003
+a35e0003a3900003a3ba0003a40a0003a43a0003a48a0003a4b80003a500
+0003a5440003a57a0003a5d80003a62c0003a6500003a6ac0003a7120003
+a76e0003a7ea0003a8940003a8d80003a8fc0003a93c0003a96a0003a9a6
+0003a9fa0003aa500003aaa60003ab040003ab2a0003abdc0003ac9c0003
+ad7c0003adac0003add80003ae160003ae540003ae840003aec00003af08
+0003af3e0003af960003aff80003b0aa0003b1760003b2560003b2840003
+b2aa0003b2e00003b3160003b3440003b3720003b3a00003b3de0003b422
+0003b4580003b4c40003b5240003b57e0003b5fe0003b6860003b6da0003
+b7180003b73e0003b7800003b7ae0003b7ec0003b83e0003b8920003b8ea
+0003b93e0003b9700003b9c60003ba220003bab40003bade0003bb080003
+bb700003bb980003bbd60003bc3e0003bccc0003bd600003bd860003bdc2
+0003be4a0003becc0003bf3a0003bfc00003c04c0003c0d80003c1640003
+c1b00003c1fe0003c2340003c2680003c29a0003c3060003c3b20003c3e8
+0003c41e0003c4640003c48e0003c4ea0003c5460003c5840003c5f00003
+c67a0003c6f00003c7540003c77a0003c7b40003c82c0003c8be0003c950
+0003c9b80003ca260003caa80003cad20003cb000003cb480003cbcc0003
+cbf60003cc200003cc7c0003ccbe0003cd680003cda20003cdf20003ce72
+0003cee40003cf580003cf980003d01c0003d0a80003d12e0003d1940003
+d1ce0003d2160003d2520003d2800003d3140003d3960003d43c0003d48a
+0003d4da0003d5500003d5bc0003d5fc0003d62e0003d6600003d6980003
+d6d00003d6fc0003d7280003d7540003d7800003d7ac0003d7d80003d80c
+0003d8400003d8780003d8b00003d9740003d9c80003daac0003dba60003
+dbb60003dc7a0003dd180003dde60003debc0003dfd00003e0b20003e0c2
+0003e1640003e1fc0003e2ba0003e3a00003e3fe0003e4fa0003e5720003
+e6a00003e79c0003e8580003e8680003e8bc0003e9a00003ea6e0003eac8
+0003ebd20003ec7a0003ed280003ed380003ed480003ee140003eeca0003
+ef960003f06a0003f13c0003f2940003f3980003f3a80003f4440003f4fa
+0003f5620003f6120003f6780003f7740003f8240003f8d60003f9980003
+fa4e0003fb200003fc220003fd260003fe060003ff380004002c00040112
+000401d4000402ce0004037200040382000403aa00040428000404380004
+0476000404b4000404f2000405200004054c000405780004059e000405ca
+000405f6000406240004065200040680000406ac000406da000407080004
+0736000407640004079a000407d0000408060004083c00040872000408a8
+000408de00040914000409240004095a00040990000409c2000409f40004
+0a2200040a5000040b7400040c9600040cc400040cf200040d2000040d4e
+00040e8600040f7600040fa400040fd2000410000004102e000410c20004
+10e80004110e0004113400041162000411900004123e000412d800041306
+000413340004136600041398000413c6000413f400041426000414580004
+1486000414b4000414e6000415180004154600041574000415a6000415d8
+00041606000416340004166600041698000416c6000416f4000417260004
+175800041786000417b4000418aa00041990000419be000419ec00041a66
+00041b9400041cce00041d5800041df000041e1e00041e4c00041e820004
+1eb800041eea00041f1c00041f4a00041f7800041faa00041fdc0004200a
+0004203800042090000420ce00042168000421c80004223a000423080004
+231800042420000424e8000425bc000426ec000427c20004289000042962
+00042ad200042ae200042af200042c4e00042d2600042d9200042ea60004
+2eb600042f7c00043086000431f000043260000432e80004339a0004340a
+0004341a0004342a000434cc00043562000435b6000436ba000437600004
+3808000438da0004397e00043a2000043aae00043abe00043bcc00043cca
+00043d9400043df000043e4c00043ecc00043f2e00043fb20004400a0004
+40640004411c000441d80004435400044364000444060004449a000445b6
+0004462e000446a4000447520004483c000448d00004493c00044a1c0004
+4acc00044b5400044bec00044cd600044dd400044f660004500c000450b8
+0004516200045210000453180004532800045406000454fe0004550e0004
+55a000045642000456800004575000045810000458ca000459bc00045b28
+00045c8e00045dbc00045e92000460060004610c00046220000462920004
+641c000464860004656c0004666000046706000467380004676a0004677a
+000468500004698400046a8400046b5c00046c6400046d4e00046dae0004
+6e0a00046f1800046f94000470ba000471ce0004729200047356000473f4
+00047482000475180004767a0004768a000477d6000478e600047a2a0004
+7b2000047bee00047c9e00047d1e00047e1000047efc00047f0c00047f1c
+00047f2c00047fb2000480420004819e000482f2000483a20004843c0004
+85560004865400048712000487e40004890600048a3e00048b1400048c12
+00048d2c00048e7800049016000491a2000492540004930a0004944c0004
+957800049610000496b6000496e80004971a000498e200049a8c00049bb8
+00049cdc00049e660004a0120004a0400004a06e0004a12e0004a1ca0004
+a2cc0004a32c0004a39e0004a3da0004a4160004a5e00004a7f00004a8c8
+0004a9aa0004aa5c0004aae80004abec0004acfe0004adca0004ae920004
+afd20004b1000004b1c20004b2820004b32a0004b3dc0004b4440004b4ac
+0004b5880004b65c0004b79c0004b8cc0004b9ee0004bae40004bb3c0004
+bb960004bc020004bc720004bcf60004bd7c0004be8c0004bf800004c0d2
+0004c20a0004c21a0004c2480004c2760004c35e0004c4420004c4c80004
+c55e0004c5e00004c65e0004c6de0004c75e0004c7e00004c8620004c936
+0004ca2e0004ca5c0004ca8a0004cabc0004caee0004cafe0004cb0e0004
+cb3c0004cb6a0004cb9c0004cbce0004cc000004cc320004cc640004cc96
+0004cd620004cd720004cda00004cdce0004ce000004ce320004ce640004
+ce960004cec80004cefa0004cf2c0004cf5e0004cf8c0004cfba0004cfec
+0004d01e0004d0500004d0800004d0b20004d0e40004d16a0004d1d80004
+d26c0004d27c0004d3760004d4800004d5800004d66c0004d7360004d804
+0004d8b20004d9700004da220004dac40004dba80004dc600004dcea0004
+dd700004ddc60004de560004deb80004def40004df7e0004dfde0004e012
+0004e0460004e0860004e0ee0004e11a0004e19e0004e1e00004e2220001
+000008d1008c0010004c000700020010002f005500000469ffff00030001
+b15440b80135b31c22392f410c0135003f0135004f0135008f0135009f01
+3500050040012eb31c1f3930411201280001004001280080012800900128
+00a0012800b00128000500ef0126000100400125b31b1f3940410a012400
+01002f01050001004f010400010040010340aa090d392f652f662f672f68
+2f692f6a2f742f752f7b2f7c2fd12fd20c20fc30fc40fcd0fc04f1f2197f
+f2018ff2aff2e0f203d1d216171c7b7c161b7b7c19307c407c507c607c70
+7c05767716171c6d7016171c6c6f16171c6b6e161b0f6b7f6b8f6e9f6eaf
+6e056b6e7f721a747514151c676a14151ca96ab96ae96af96a0466691415
+1cc669016568141b0f651f6502af68bf68ef65ff6504656885711a197316
+7a431921794319217f413201340001007f01330080013300900133000300
+6f0132007f0132008f01320003007001210001002f0121003f0121004f01
+21005f0121000400a0011e00b0011e00c0011e00030020012d0030012d00
+60012d0070012d0080012d0090012d00060040010fb40b1f39092f411f01
+0e005f010e009f010e00af010e00bf010e00050090010e00bf010e00cf01
+0e00df010e00ef010e00050020010e006f010e00b0010e00d0010e00e001
+0eb205d10f4123010e003f010e00bf010e00cf010e0004000f010e005f01
+0e006f010e00a0010e00bf010e00cf010e00df010e0007003f010e004f01
+0e007f010e00af010e00ef010e00ff010eb2069f7f4123010e00af010e00
+e0010e00ff010e0004001f010e003f010e00af010e00df010e00ef010e00
+05000f010e001f010e002f010e007f010e008f010e00c0010e00df010e00
+ef010eb2086d9f411b010e00cf010e00ef010e00ff010e0004000f010e00
+ef010e0002000f010e002f010e003f010e004f010e00c0010e00df010e00
+ef010eb2073a70bd010e00df010e00020040010eb32b33395f411b010e00
+70010e008f010e009f010e00cf010e00df010e0006000f010e001f010e00
+3f010e0080010e00bf010e00ef010e00060040010eb3091b3970bb013600
+0100200108b30d113940b80102b20b1439b9ffc00107b31b22392f411801
+0c004f010c0002002f010c0001008f010b0001002f0107004f010700c001
+0700d001070004004f010700010040010040640b103940fe0b1139e0f601
+e0f60114f424f40274f40140df60df0220d830d840d80366c176c10299be
+0120b230b240b20360b070b0029b93002b9a92002b9991002b9493002b92
+93002b9193062b9395032b9885042b9796042b9695032b9995a995026f41
+0f0131007f0131008f01310003013001160032001f011901160015001f01
+16b285032bb9ffe0012fb30b143970410d01170001002f0117003f011700
+4f0117005f0117000401130114b22a1fa0bc011400b0011400c001144016
+0370fbf0fb022ffb6ffb7ffb0340fa50fa60faf0fa04b8ffc040fffa1115
+3950ec70ec0250ec70ec0240ec01bfeb0170ea0130ea0170e9015fe970e9
+f0e903a0e9015fe870e802efe8017fe8bfe8efe803f0e701f0e7012fe780
+e7a0e7f0e70450e6f0e60250e660e670e6c0e60450e50170e50180e4e0e4
+f0e40340dca0dc02309050900220a04fa05fa09fa0afa0efa006e0f501e0
+f501f3851e1f2fe20140dd019fd5afd5bfd5030fd340d302e0d0010fc470
+c4022fc43fc44fc45fc49fc4afc4efc4ffc40899bd99bf02dad9042bd685
+022bcccd062bcd85022bc9c8062bc885022b8d8b042b8c8b191f8b83c81f
+897d641f817f082b7d7f082b7f85072baf85042b8885012b8785002b8485
+042b8385002b2ffd4ffd027f40abef012df03bf04ff069f07ff0051b3715
+1836151535151234150f33150c3215093115063015032f15002e1526270f
+28270f26002a1f0f2a2f2a3f2a032f24bf24022a2b0f2c2b0f22230e2423
+0f1e1f0e201f0f2005010f10110c0c0d0e0c090a0b0c0607080c0304050c
+0001020c0003181f500f700f027f0f800fbf0f030f031f032f034f037f03
+bf03ef030704012c1f1b011d0d18071a0d1510170d1204140d701b01501b
+701bf01b03b8ffc0400b1b131839701b801b02503301b0124b004b5442b0
+13014b004b5342b0332b4bb8032052b0322b4bb009505b58b101018e59b0
+332bb00288b8010054b00488b8020054b012435a5b58b80119b101018e85
+1bb900040100b04b60858d592b1db0644b5358b0801d59b0324b5358b090
+1d5900732b74742b2b2b2b2b7373742b2b2b2b2b2b2b732b2b2b2b2b2b73
+732bb1282645b02a4561b02c4560442b2b2b2b2b2b2b2b2b2b2b2b73b0ef
+45b0f0456168b0f04560b0ef23447373012b2b2b2b2b2b2b2b2b2b2b2b2b
+2b2b2b2b2b73737473737373732b74737374737373747374737474737374
+7374747374737374742b747374742b73742b2b2b2b7300732b2b2b2b2b2b
+2b2b2b2b737373737373737473742b2b73737373732b2b2b742b73742b75
+5e7374755e7374755e7374755e7374755e2b73747374737373012b2bb018
+b0314b53422b2b73742b732b732b2b2b732b2b2b2b732b2b2b73742b7373
+2b7373732b7373742b732bb109322b4bb05052424bb03c524bb00f505bb0
+1a23424bb0c8524bb036505bb00c23422b00000000>
+[16105 16169 15785 16013 16241 16333 15745 15601 15869 15477 16269 15937 16109
+16361 16209 16209 16113 16321 16289 14899 ] AllocGlyphStorage
+]def
+108 44
+PrepFor2015
+AddFontInfoBegin
+AddFontInfo
+/OrigFontType /TrueType def
+/OrigFontName <4D6963726F736F66742053616E73205365726966> def
+/OrigFontStyle () def
+/FSType 8 def
+AddFontInfoEnd
+[16#2c 16#6e18af9b ] AddXUID
+Type42DictEnd
+1 9274 49 <000100a40000052305ba0009007140180702010281060714060607050304
+01077f000e0d0d063b00b8fffa40090b0b063b0006027f04b8fff8b40d0d
+063b04b8fff8401c0b0b063b04400b006e020a046b02770b01780b01480b
+e80bf80b03005f5d715d2b2b011a18102b2b4ded32102b2bed32002f3f31
+30872e2b877dc4212301112311330111330523c7fd00b8c60300b90485fb
+7b05bafb7b048500>/TTE1CD9F20t00 AddT42Char
+1 11218 55 <0001002d000004b605ba00070049403101059106030300a00205a0027f03
+040d0d063b03400809037f3030e9090148099809b809f809040709170977
+09d70904005f5d5d5d2b011a18102b4dede610e6002f3fed323130012111
+231121352104b6fe1bc3fe1f0489050cfaf4050cae00>/TTE1CD9F20t00 AddT42Char
+1 8070 43 <000100a40000052305ba000b006f4019039108400605089118300a060301
+0509017f000e0d0d063b00b8fffa40090b0b063b0008047f05b8fff8b40d
+0d063b05b8fff840170b0b063b05400d006e020c056b02570d01480d880d
+02005f5d712b2b011a18102b2b4ded32102b2bed32002f333f332b001a18
+104ded31302123112111231133112111330523c3fd06c2c202fac302b2fd
+4e05bafda6025a00>/TTE1CD9F20t00 AddT42Char
+1 6982 38 <00010060ffe7055e05d3001900c140341a182a183a18030511010a0f0115
+080103470901080901090d92060407178717020b00171392001307101710
+020d020a09167d17b8fff4b40d0d063b17b8fff040190b0b063b17051715
+17020f17400b1036107d030c0d0d063b03b8ffd6400c0b0b063b03400703
+01100303b8ffe2401d090b361b176f021a036c02b81b01571b01271b371b
+571b771ba71b05005f5d715d2b2b2b015f5e5d1a18102b2b4ded2b5e5d10
+2b2bed39395f5e5d003fedcd5f5e5d3fedcd5d5d31305f5d5d5d5d052000
+1110002132001723262623220011100033323637330600030afec9fe8d01
+730137ef015015c80cd9a5dffefc0102ddacd40ec815feba190199015d01
+5d0199fefed38ba4fecdfee3fee4fecca89ceaff0000>/TTE1CD9F20t00 AddT42Char
+1 7274 39 <000200a40000056005ba0006000f007840180a0401050201090f91000307
+9106080b180b020d020b7d03b8fffcb40d0d063b03b8ffeab70b0b063b03
+077f06b8fff6b40d0d063b06b8fff8401c0b0b063b064011036f0210066b
+02571101a7110118114811881103005f5d5d712b2b011a18102b2b4ded10
+2b2bed5f5e5d002fed3fed31305e5d5d1321201110212137212012111002
+2121a401d102ebfd15fe2fc2010b013fe8e7fec0fef505bafd2bfd1bae01
+29010e0107012000>/TTE1CD9F20t00 AddT42Char
+1 10444 53 <000200a40000056a05ba0014001c00f14017470c570c670c03024c035c03
+020302011c018100141400b8fff840320b0b063b0000148a14012c143c14
+0208141814020902050e150e250e350e0403197d070e170e270e370e040e
+040d0d063b0eb8fff4401a0b0b063b0e01020e1112140600080018007800
+030d0015077f08b8fff8b40d0d063b08b8fff8402f0b0b063b08401e006f
+021d086b028711010212110915919706010606081c9209030008481e0177
+1e01a71eb71e02005f5d715d002f333fed12392f5ded1239395f5d302b2b
+011a18102b2b4ded325f5e5d1117332f2b2b5ded5f5d5f5e5d5d5d872e2b
+2b0e4b52587d1b7a5910c431005f5d5f5d21230326262321112311213216
+16151406071516170121323635342121056ad28a25ac70fe99c20289aad8
+88b0999950fc8f01b1b5a3fec6fe3101876884fd8d05ba42d48598cc1f04
+31d80192728cfa00>/TTE1CD9F20t00 AddT42Char
+1 2538 16 <0001004201b80268026d0003003140208f0101012f024f025f0203025000
+6000027001012f01010005017005012005015d712f10c65d5d5d002f5dcd
+5d3130012135210268fdda022601b8b5>/TTE1CD9F20t00 AddT42Char
+1 7462 40 <000100a4000004e905ba000b0062401f0991064002010691183005910203
+0a910107081708020a00080400060a7f01b8fffab40d0d063b01b8fffe40
+120b0b063b01400d006f020c016b02e80d01005f5d2b2b011a18102b2b4d
+ed3210c4c45f5e5d002fed3fed2b001a18104ded31302121112115211121
+1521112104e9fbbb0423fc9f0329fcd7038305baaefe40aefe10>/TTE1CD9F20t00 AddT42Char
+1 8922 48 <000100a40000060605ba000c0125b90003fff4400a0d0d063b0b48091036
+09b8ffb840960910368c0b9c0b0283099309020268040101480458047804
+0302670301014703570377030302180a0101050a150a250a0302880a980a
+a80a0300bc0adc0a0203c80a01011e052e0502037705a705b705c705d705
+05018505950502001e022e0202037702a702b702c702d702050185029502
+0205020a030479040108041804280438040409000b08030104070b027f00
+0a0d0d063b00b8fff640090b0b063b0009057f07b8fffc40200b0b063b07
+400e006e020d076b02770e01570e970e02080e180e380ee80e04005f5d5d
+712b2b011a18102b4ded32102b2bed32002f33333f335f5e5d5d12173931
+305d5f5d5f715f5d5f5d5f715f5d5f5d5f5d5f715f5d015f5d5f5d5f5d5f
+5d5f5d5d2b2b2b212311012301112311210101210606b8fe5eaefe5eb801
+23018d018f012304dffb2104dffb2105bafb3a04c600>/TTE1CD9F20t00 AddT42Char
+1 9726 51 <000200a4000004fc05ba000b0015007d400d0c9109090b159100030b107d
+05b8ffeeb40d0d063b05b8ffda40190b0b063b053705010205051505020d
+0305400910360c0a7f0bb8fff8b40d0d063b0bb8fffc40170b0b063b0b40
+17056f02160b6b02e817017717a71702005f5d5d2b2b011a18102b2b4ded
+322b5f5e5d5f5d102b2bed002f3fed12392fed3130132132161615140421
+21112313213236353426262321a40223b4f38efee6fef5fe8fc2c20173bb
+9f58877ffe9105ba43df8adee6fdb602f88c84588824>/TTE1CD9F20t00 AddT42Char
+1 8832 47 <000100a40000042f05ba0005003b400f020304910100400f18360007047f
+01b8fffc40110b0b063b014006016b02a70701880701005f5d5d2b011a18
+102b4ded10c62b002fed3f3130212111331121042ffc75c202c905bafaf4
+>/TTE1CD9F20t00 AddT42Char
+1 6372 36 <0002fffe0000055805ba0002000a00fd402ea809b8090257020103000504
+0401020607070101041c01020481030a1403030a01071c01000781080914
+08080908b8ffea40740919360316091936980aa80a02027a0a0103370a47
+0a570a670a0401070a170a270a03029809b80902037709013a094a095a09
+6a090418092809880903020a09010a0306934007021702020b0002400b0b
+063b020203080903080c0377020b087602370c670cf70c03580c780c0208
+0cb80c02005f5d715d2b2b00182f3f1239392f2b5f5e5d1a4ded3130015f
+5e5d5f5d5d5d5f5d5f5d5f5d5f5d5f5d2b2b872e2b084b52587d1b7a5910
+c487052e182b084b52587d1b7a5910c40705103c3c07103c3c015f5d5d01
+01030123032103230133039afefef603b6dbaafd9aa2cd0233d1025802a8
+fd58fda801befe4205ba>/TTE1CD9F20t00 AddT42Char
+1 0 0 <0002003200000226060000030007000033112111252111213201f4fe7801
+1cfee40600fa006c0528>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/N 49 def
+/T 55 def
+/H 43 def
+/C 38 def
+/D 39 def
+/R 53 def
+/hyphen 16 def
+/E 40 def
+/M 48 def
+/P 51 def
+/L 47 def
+/A 36 def
+/.notdef 0 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 1 /N put
+dup 2 /T put
+dup 3 /H put
+dup 4 /C put
+dup 5 /D put
+dup 6 /R put
+dup 7 /hyphen put
+dup 8 /E put
+dup 9 /M put
+dup 10 /P put
+dup 11 /L put
+dup 12 /A put
+pop
+Pscript_WinNT_Incr begin
+%%BeginResource: file Pscript_Text 5.0 0
+/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
+/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
+length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
+{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
+/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
+if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
+{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
+StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
+! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
+put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
+makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
+Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
+/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
+{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
+/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
+/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
+/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
+Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
+add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
+/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
+FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
+idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
+Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
+length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
+add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
+putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
+256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
+/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
+definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
+makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
+findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
+{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
+get undefinefont}forall undefinefont}b
+%%EndResource
+end reinitialize
+F /F0 0 /0 F /TTE1CD9F20t00 mF
+/F0S47YFFFFFFBB F0 [71.031 0 0 -68.75 0 0 ] mFS
+F0S47YFFFFFFBB Ji
+3125 894 M <010203040506070208090A0B0C0208>S
+3125 800 M <010203070208090A0B0C0208>S
+3125 706 M <080B02070208090A0B0C0208>S
+: 3125 550 594 78 rc 317 VM?
+1 7608 41 <000100a40000048105ba0009004f40110591020207019108030704040002
+067f07b8fffe401c0d0d063b074000400b16360b006f020a076b02e80b01
+270b570b02005f5d5d2b2b2b011a18102b4ded3212392f002f3fed12392f
+ed3130012111211521112311210481fce502b1fd4fc203dd050cfe3aaefd
+6805ba00>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/F 41 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 13 /F put
+pop
+3125 613 M <0C06080D070208090A0B0C0208>S
+; N 3625 1056 M 3788 1056 I K
+N 3788 1056 M 3713 1075 I 3713 1038 I C
+ O 951 VM?
+1 10782 54 <0001005cffe704ec05d300230140b9001dfff4b40b0b063b1cb8fff44076
+0b0b063b5a220103681f0102571f0100071f0101351e451e0203781d0102
+131d231d531d0303381a481a020228173817481703007814010255140155
+100103680e780e02780d0101080d010a5a0c01580b010225093509020317
+05270537050300670201024a0201030a0f1b21040068150115189112b8ff
+fc40150d0d063b120407034703570367038703050b000307b8fff040200d
+0d063b07910013167f150c0b0b063b151b7f0f0c0b0b063b0f150f030a7f
+21b8ffe0b40b0b063b21b8fff4401a0d0d063b21047f034025216f022403
+6c02b825e82502a72501005f5d5d2b2b011a18104ded102b2bed1239392f
+2bed2f2bed003fed2bc45f5e5d3f2bedc45d12173931305f5d5f5d5f5d5f
+5d5f5d5d5e5d5f5d5d5f5d5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d5f5d
+5f5d2b2b0520002733161633323635342624263534243332041723022122
+0615141604161615140402cdfecafecd08bb0ff3aca3c7cefe09db011dec
+f8013009bd1dfeb1a2b28f0187e6a4fed3190116daa49d8673796e6bbe9e
+b2e4e6d2010a7a655c5c5654b195bdfa>/TTE1CD9F20t00 AddT42Char
+1 8228 44 <000100bc0000017f05ba00030063400c020301007f01040d0d063b01b8ff
+fc400d0b0b063b01400405017f213005b8ffc0402a232836070517053705
+6705770587050647055705670587059705a705b705c705f7050998050178
+0501005f5d715d712b2b011a18102b2b4ded002f3f313021231133017fc3
+c305ba00>/TTE1CD9F20t00 AddT42Char
+1 7732 42 <00010060ffe705b605d3001d00e640521c100b0b063b2a1d3a1d7a1d0303
+671401022511012a0f010388080102350801039801010217911818002809
+01090d920604139200131a0a7d090c0d0d063b09100b0b063b0908184818
+020900181c167f1ab8ffd6401b0b0b063b1a351a0103371a01000710010d
+02107d030c0d0d063b03b8ffd6400f0b0b063b03402703010503010e0303
+b8ffe24018090b361f1a6f021e036c02781f01271fa71fb71ff71f04005f
+5d5d2b2b2b015f5e5d5d1a18102b2b4ded5f5e5d5f5d5f5d102bed32c45f
+5e5dd42b2bed002f3fed3fedcd5d12392fed31305f5d5f5d5f5d5f5d5d5f
+5d5f5d2b0520001110002120041723262623220011100033203735213521
+112327060325fec4fe770184013b0109015f15c90ce8bee3feeb0118e201
+3d9afe7d023f89339519019e01580159019dffd68ea1fecafee6fee7fec9
+d1dfaffd149ab300>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/S 54 def
+/I 44 def
+/G 42 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 14 /S put
+dup 15 /I put
+dup 16 /G put
+pop
+3800 1081 M <0E02060F0110070208090A0B0C0208>S
+N 2744 1338 M 2906 1056 I K
+N 2906 1056 M 2888 1131 I 2850 1113 I C
+ O N 2744 1338 M 2906 1338 I K
+N 2906 1338 M 2831 1356 I 2831 1319 I C
+ O 2919 1363 M <0B0F0E02070208090A0B0C0208>S
+N 2606 1056 M 2906 1056 I K
+N 2906 1056 M 2831 1075 I 2831 1038 I C
+ O 635 VM?
+1 11490 57 <0001000c0000054805ba000600c0b90003ffea405d091936001609193678
+019801c80103023501450155016501040307011701270167010477029702
+c70203023a024a025a026a0204030802180228026802040a020303020800
+700207036d0237086708f7080358087808020808b80802005f5d715d2b2b
+00182f3f3130015f5e5d5f5d5f5d5d5f5d5f5d2b2bb106024354581b401a
+05061c0504068100011400000105041c05060481030214030302872e4d2b
+084b52587d1b7a5910c487052e182b084b52587d1b7a5910c45901012301
+3301010548fdc6c8fdc6cf01cf01cf05bafa4605bafb1704e900>/TTE1CD9F20t00 AddT42Char
+1 9432 50 <00020060ffe705db05d3000b001700bdb10602435458400a129200040c92
+06130f03b8ffeeb40d0d063b03b8ffe040100b0b063b0303191815090c0d
+0d063b09b8ffd6b70b0b063b090919181112392f2b2bcd1112392f2b2bcd
+003fed3fed31301b404a12920a001a002a000300040c9205061506250603
+0906130f7d03157d09406803010a031a033a034a03046709010509150935
+094509040a0319036f0218096c02e81901571901271901005f5d715d2b2b
+015f5e5d5d5d5d1a18104ded10ed003f5e5ded3f5ded3130590120001110
+00212000111000013200111000232200111000031f01340188fe78feccfe
+cbfe76018a0133dc0119fee8d9ddfee5011a05d3fe60feaafeaafe6001a1
+0155015601a0faba0138011801180138fec8fee8fee9fec7>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/V 57 def
+/O 50 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 17 /V put
+dup 18 /O put
+pop
+2919 1081 M <110804021206070208090A0B0C0208>S
+N 3617 1058 M 3617 1047 3607 1037 3596 1037 -c 3584 1037 3574 1047 3574 1058 -c 3574 1069 3584 1079 3596 1079 -c 3607 1079 3617 1069 3617 1058 -c C
+ O N 1769 1338 M 1931 1619 I K
+N 1931 1619 M 1875 1563 I 1913 1544 I C
+ O N 1769 1338 M 1931 1525 I K
+N 1931 1525 M 1869 1481 I 1894 1456 I C
+ O N 1769 1338 M 1931 1431 I K
+N 1931 1431 M 1856 1413 I 1875 1375 I C
+ O N 1769 1338 M 1931 1338 I K
+N 1931 1338 M 1856 1356 I 1856 1319 I C
+ O N 1769 1338 M 1931 1244 I K
+N 1931 1244 M 1875 1300 I 1856 1263 I C
+ O N 1769 1338 M 1931 1150 I K
+N 1931 1150 M 1894 1219 I 1869 1194 I C
+ O N 1769 1338 M 1931 1056 I K
+N 1931 1056 M 1913 1131 I 1875 1113 I C
+ O 635 VM?
+1 12728 60 <0001000a0000054c05ba000800dc4018010704670401034804580402000a
+041a04020b0200040305b8ffe8b60a0f3605030305b8ffe1400c091b3600
+1f091b3607017f04b8fff8403b0b0b063b04400500047f30300a00700209
+056d02070a170a970ab70ad70af70a06070a370a670a870aa70a05480a68
+0a780a03c80ad80ae80a03005f5d715d712b2b2b011a18102b4ded392b2b
+002f3f2b1239395f5e5d5f5d5f5d1133333130b106024354581b401a0708
+19070608810001140000010706190708068105041405050487052e2b084b
+52587d1b7a5910c487052e182b084b52587d1b7a5910c459010111231101
+330101054cfdc0c2fdc0ec01b601b405bafcb3fd93026d034dfd5d02a300
+>/TTE1CD9F20t00 AddT42Char
+1 6682 37 <000300a4000004ec05ba000d0016001e00c24043380d480d02080b010708
+0111020b1e910e4005040e91183016910503179104270001081a181a020d
+020b04127f0c091c09020f0309180d0d063b090c0b0b063b090904b8fffa
+b40d0d063b04b8fffcb70b0b063b041a7d00b8fff4b40d0d063b00b8ffea
+b60b0b063b000e17b8fffc40190d0d063b177f044020006f021f046b02a7
+20018820e82002005f5d5d2b2b011a18104ded2b32102b2bed122b2b392f
+2b2b5f5e5ded12395f5e5d5d002fed3fed2b001a18104ded3931305f5e5d
+5d5d01140421211121320415140716160121323635342623211121203534
+26232104ecfee8fef5fddb020aea010cd38e8dfc7a0146a19894b7fecc01
+61015ca1d4feb801aacedc05bac8aed46624c1012f67786c6dfba2fc8379
+>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/Y 60 def
+/B 37 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 19 /Y put
+dup 20 /B put
+pop
+1944 1644 M <0E130914120B070208090A0B0C0208>S
+635 VM?
+1 11330 56 <000100a4ffe7052305ba00130059402077120103070a010b0800010c020e
+05030a9100130e7f0f0e0d0d063b0f067f05b8fff640150d0d063b054015
+0f6e0214056b02a71501481501005f5d5d2b2b011a18102b4ded102bed00
+3fed3f335f5e5d5e5d31305f5d0522260235113311101633323611113311
+10060402e3fffd43c2c2bbbbc2c37fff0019c6010cb10350fcb3fedfb6b6
+0121034dfcb0fef6fc7d>/TTE1CD9F20t00 AddT42Char
+1 8352 45 <00010037ffe7035c05ba000f007c401f550a01030e0308075807020b0007
+0a914803010203130e7f0f0e0d0d063b0fb8fff0401d0b0b063b0f087f40
+6707010807180728074807040d0007160d0d063b07b8ffe840120b0b063b
+07110f6e02b811012711a71102005f5d5d2b01182f2b2b5f5e5d5d1a4ded
+102b2bed003f5f5dedc45f5e5d3f5f5d3130011006232226353533103332
+36351133035cd0cbb6d4c3c76970c201d5fef3e1deb627fef476bf03ef00
+>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/U 56 def
+/J 45 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 21 /U put
+dup 22 /J put
+pop
+1944 1550 M <0E020615040215060807121416080402070208090A0B0C0208>S
+1944 1456 M <0E020C01050C060507121416080402070208090A0B0C0208>S
+317 VM?
+1 9928 52 <00020060ff8b05f405d3000f001f018c400d1d200b0b063b10200b0b063b
+1db8ffe0b40b0b063b10b8ffca40180b0b063b611e711e811e0303070017
+002700030088020111b8ffc040490f13368a1e01021a1e6a1e7a1e030137
+1167110202271101001010110f000f0e001f1d1d1c020203011e0101001f
+001f811e01141e1f1e1e011592020d0f03040a0a1a0a2a0a03030ab8ffe8
+404c0b0b063b0a041e0001181f281f681f781f041f1b9217016701770103
+003a014a015a01030105041504250403090304180b0b063b0413381e481e
+020000101b1d1e04121802040f0307127d0db8ffeeb40d0d063b0db8ffd6
+400e0b0b063b0d187d070c0d0d063b07b8ffd640320b0b063b0740680d01
+0a0d1a0d3a0d4a0d046707010507150735074507040a03210d6f0220076c
+02e82101572101272101005f5d715d2b2b015f5e5d5d5d5d1a18102b2b4d
+ed102b2bed12173911121739c65f5d003f2b5f5e5dc65d5f5dfdc45d1139
+393f2b5f5d121739ed313087082e2b87087dc407083c083c0708103c083c
+005f5d5f5d5f5d5f5d2b015d5f5d5f5d002b2b012b2b2507270623200011
+10002120001110072736111000232200111000333237273705f473f2a3cd
+fecbfe76018a013501340188be9287fee8d9ddfee5011ada746992731489
+bf6301a10155015601a0fe60feaafeb4d573a0010e01180138fec8fee8fe
+e9fec7317389>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/Q 52 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 23 /Q put
+pop
+1944 1363 M <0E08171508010408070208090A0B0C0208>S
+N 2736 1340 M 2736 1328 2726 1318 2715 1318 -c 2703 1318 2693 1328 2693 1340 -c 2693 1351 2703 1361 2715 1361 -c 2726 1361 2736 1351 2736 1340 -c C
+ O 1944 1269 M <011509140806070208090A0B0C0208>S
+1944 1175 M <010F0B070208090A0B0C0208>S
+1944 1081 M <0C06060C13070208090A0B0C0208>S
+N 2598 1058 M 2598 1047 2588 1037 2577 1037 -c 2565 1037 2555 1047 2555 1058 -c 2555 1069 2565 1079 2577 1079 -c 2588 1079 2598 1069 2598 1058 -c C
+ O N 2025 844 M 2188 963 I K
+N 2188 963 M 2119 931 I 2138 900 I C
+ O N 2025 844 M 2188 725 I K
+N 2188 725 M 2138 788 I 2119 756 I C
+ O 2200 988 M <0E15140E0817070208090A0B0C0208>S
+2200 750 M <080B0809080102070208090A0B0C0208>S
+N 2942 727 M 2942 715 2932 705 2921 705 -c 2909 705 2899 715 2899 727 -c 2899 738 2909 748 2921 748 -c 2932 748 2942 738 2942 727 -c C
+ O N 988 1088 M 1150 1338 I K
+N 1150 1338 M 1094 1288 I 1125 1263 I C
+ O N 988 1088 M 1150 844 I K
+N 1150 844 M 1125 919 I 1094 894 I C
+ O 1163 1363 M <02130A08070208090A0B0C0208>S
+N 1761 1340 M 1761 1328 1751 1318 1740 1318 -c 1728 1318 1718 1328 1718 1340 -c 1718 1351 1728 1361 1740 1361 -c 1751 1361 1761 1351 1761 1340 -c C
+ O 317 VM?
+1 12422 59 <0001000a0000054c05ba000b00f6406c080b380b680b880b980b05070537
+05670597050409020504050203020106010809080b0a0b0007000201020b
+000b03030a050605080708040409070106018100071400000709030a0381
+040914040409070627066706770604080428046804780404010603040a40
+13163606b8ffc040381216360a0a2a0a020a002a00020506250602050425
+04020b030a060a0600040d0070020c046d02e90d01580d01a80db80df80d
+03470d01005f5d5d715d2b2b0111123939182f2f5f5e5d5d5d5d2b2b002f
+3f5f5d5d313087052e4d2b877dc4872e182b877dc4871008c008c0871008
+c008c0871008c008c0871008c008c0015f5e5d5d21230901230901330901
+3301054ceefe4efe4cee0233fe05ed017b017dedfe03026dfd93030402b6
+fde2021efd4a>/TTE1CD9F20t00 AddT42Char
+/TTE1CD9F20t00 findfont /CharStrings get begin
+/X 59 def
+end
+/TTE1CD9F20t00 findfont /Encoding get
+dup 24 /X put
+pop
+1163 869 M <08180A06080E0E0F1201070208090A0B0C0208>S
+N 2017 846 M 2017 834 2007 824 1996 824 -c 1984 824 1974 834 1974 846 -c 1974 857 1984 867 1996 867 -c 2007 867 2017 857 2017 846 -c C
+ O 575 1113 M <0208090A0B0C0208>S
+N 979 1090 M 979 1078 970 1068 958 1068 -c 947 1068 937 1078 937 1090 -c 937 1101 947 1111 958 1111 -c 970 1111 979 1101 979 1090 -c C
+ O LH
+(%%[Page: 1]%%) =
+%%PageTrailer
+
+%%Trailer
+%%DocumentNeededResources:
+%%DocumentSuppliedResources:
+%%+ procset Pscript_WinNT_ErrorHandler 5.0 0
+%%+ procset Pscript_FatalError 5.0 0
+%%+ procset Pscript_Win_Basic 5.0 0
+%%+ procset Pscript_Win_Utils_L2 5.0 0
+%%+ procset Pscript_Win_GdiObject 5.0 0
+%%+ procset Pscript_Win_GdiObject_L3 5.0 0
+%%+ procset Pscript_T42Hdr 5.0 0
+%%+ procset Pscript_Text 5.0 0
+Pscript_WinNT_Incr dup /terminate get exec
+ehsave restore
+(%%[LastPage]%%) =
+%%EOF
Binary files old-cl-unification-1/docs/html/images/unif-templ-hier.sxd and new-cl-unification-1/docs/html/images/unif-templ-hier.sxd differ
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/index.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,384 @@
+<html>
+ <head>
+ <title>CL Unification</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="mailing-lists.html" class="navigation-link">Mailing Lists</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> <div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION</h1>
+
+ <p>The notion of <em>unification</em> originated in the field of
+ formal logic (e.g. <a href="#R65">[R65]</a>,) and has been used
+ extensively in Computer Science and Programming Languages. Most
+ notably, <strong>Prolog</strong> uses the full power of
+ unification.</p>
+
+ <p>
+ Unification is also at the core of <em>type checking</em> algorithms
+ in the tradition of Milner's, and a limited form - <em>pattern
+ matching</em> - is available to the user in languages of the ML and
+ Haskell family.</p>
+
+ <p>The library presented in these pages provides a full blown
+ <em>unification framework</em> for <strong>Common Lisp</strong>.</p>
+
+ <p>Writing a pattern matcher or a an unifier in <strong>Common
+ Lisp</strong> is easy, as long as we limit ourselves to manipulate
+ only ATOMs and CONSes.</p>
+
+ <p>Alas, it would be much nicer if we could manipulate arbitrary
+ <strong>Common Lisp</strong> objects as the ML programmer can with
+ arbitrary ML objects.<p>
+
+ <p>The library presented here is the first one (to the best of the
+ author's knowledge) that is capable of manipulating arbitrary
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The hope is that this library could be incorporated directly in
+ an implementation in order to provide better type checking.</p>
+
+ <p>This should not come as a surprise, as a compiler like CMUCL does
+ include a type inference engine, which does very similar things.</p>
+
+ <h2>Unification Basics</h2>
+
+ <p>The unification process makes sure that two <em>object
+ descriptions</em> containing some <em>holes</em>
+ - i.e. <em>variables</em> - can be made equal (almost in the EQUALP
+ sense) by assigning <em>consistent</em> values to the variables
+ involved.</p>
+
+ <p>Suppose we had a function U performing unification and returning
+ a set of <em>variable assignments</em>, often called a
+ <em>substitution</em>. A very simple
+ example involving the unification of two numbers could be
+ <pre>
+ <b>U</b>(42, 42) ==> {}
+ </pre>
+ The two numbers are EQL, so no variable is involved and the empty
+ substitution is returned.
+ <pre>
+ <b>U</b>(42, 123) ==> <unification failure>
+ </pre>
+ The two numbers are not EQL, so the unification fails.
+ <pre>
+ <b>U</b>(42, x) ==> {x -> 42}
+ </pre>
+ The only way to make the unification process to succeed is to bind
+ the value 42 to the variable <code>x</code>.</p>
+
+ <p>The UNIFICATION library defines all the necessary functions and a
+ <em>unification sub-language</em> to handle most of <strong>Common
+ Lisp</strong>.</p>
+
+ <h2>UNIFICATION Library</h2>
+
+ <p>The UNIFICATION library has one main entry point, the generic function
+ UNIFY, and a sub-language definition that allows us to talk about
+ <strong>Common Lisp</strong> objects.</p>
+
+ <p>The UNIFY generic function has the following signature:
+ <pre>
+ <b>unify</b> <i>x</i> <i>y</i> &optional <i>substitution</i>
+ </pre>
+ Where <code><i>x</i></code> and <code><i>y</i></code> are either
+ arbitrary <strong>Common Lisp</strong> objects, <em>variables</em>,
+ or <em>object templates</em>. These items constitute the so-called
+ <em>extended terms</em> manipulated by the unification
+ machinery.</p>
+
+ <p><em>Variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <p>Hence, the above examples result in the following
+ <pre>
+ cl-prompt> (<b>unify</b> 42 42)
+ <i>#<EMPTY ENVIRONMENT xxxxxx></i>
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> 42 123)
+ ==> error: unification failure
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> 42 ?x)
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?x *)
+ <i>42</i>
+ </pre>
+ </p>
+ Where FIND-VARIABLE-VALUE is the accessor used to find the value of
+ a variable in a substitution.</p>
+
+ <p>As a more complicated example, consider the usual CONS based
+ unification
+ <pre>
+ cl-prompt> (<b>unify</b> '(foo (bar frobboz) ?baz) '(foo ?gnao 42))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?gnao *)
+ <i>(BAR FROBBOZ)</i>
+
+ cl-prompt> (<b>find-variable-value</b> '?baz **)
+ <i>42</i>
+ </pre>
+
+ <p>Of course note the following behavior
+ <pre>
+ cl-prompt> (<b>unify</b> '(foo ?x 42) '(foo 42 ?x))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>unify</b> '(foo ?x 42) '(foo baz ?x))
+ ==> error: unification failure
+ </pre>
+ </p>
+
+
+ <p>UNIFY works also on arrays and vectors. Strings are treated as
+ atomic objects
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3) #(1 ?x ?y))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?x *)
+ <i>2</i>
+ </pre>
+
+ <pre>
+ cl-prompt> (<b>unify</b> #2A((1 2 3) (a s ?z)) #2A((1 ?x ?y) (a s d)))
+ <i>#<ENVIRONMENT xxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?z *)
+ <i>D</i>
+ </pre>
+ </p>
+
+ <p>So far so good, but how can you unify two structures? First of
+ all there is no portable way (yet) to list all the slots of a given
+ structure. Secondly, by allowing the unification of arbitrary
+ CONSes, we have created a short-circuit in the unification
+ machinery.</p>
+
+ <p>Dealing with object instances raises similar problems.</p>
+
+ <p>Suppose we have the following definition
+ <pre>
+ (defstruct foo a s d)
+ </pre>
+ The straightforward
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) (make-foo :a 42))
+ </pre>
+ cannot be built portably, besides, we do not even have the equivalent of the
+ <code>#S(...)</code> notation for regular CLOS objects. Moreover we want
+ to do other things with other data types.</p>
+
+ <p>A simple solution is to define a <em>template sub-language</em>
+ to express unifications between structure objects or standard
+ objects (and other data types as well.) Nevertheless, the
+ definition of such sub-language cannot be CONS based, because in
+ such case, we would conflate arbitrary CONSes and the expressions of
+ the sub-language.</p>
+
+ <p>To circumvent this problem we resort to the usual trick a ML
+ programmer uses to placate the type-checker: we introduce an
+ "intermediate" data type. Essentially the following
+ <pre>
+ (defclass <b>template</b> ()
+ ((spec :accessor template-spec :type (or cons symbol number) ...)))
+ </pre>
+ </p>
+
+ <p>The TEMPLATE class is accompanied by a reader macro
+ (<code>#T</code> for <em>template</em>, or <em>type</em>, with an
+ abuse of language) and an
+ appropriate PRINT-OBJECT method. The <code>#T</code> reader macro
+ expands as
+ <pre>
+ <b>#T</b><i>something</i> ==> (make-instance 'template :spec <i>something</i>)
+ </pre>
+ With this infrastructure we can
+ express the unification of the FOO instance as
+ <pre>
+ (<b>unify</b> #S(FOO A 42 S NIL D NIL) <b>#T(foo foo-a 42)</b>)
+ </pre>
+ I.e. we use the actual structure accessor FOO-A to get to the the
+ value of the slot A in a FOO. This is an example of the template
+ language.</p>
+
+ <p>A more interesting example, which involves vectors is the
+ following
+ <pre>
+ cl-prompt> (<b>unify</b> #(1 2 3 4 5) <b>#T(vector 1 ?x &rest ?rest)</b>) ; You get the idea...
+ <i>#<ENVIRONMENT xxxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>#(3 4 5)</i>
+ </pre>
+ I.e. we have a DESTRUCTURING-BIND on steroids.<p>
+
+ <p>Note that separating the templates is necessary if we want to do
+ something like
+ <pre>
+ cl-prompt> (<b>unify</b> '(1 2 3 4 5) <b>#T(list 1 ?x &rest ?rest)</b>)
+ <i>#<ENVIRONMENT xxxxxxx></i>
+
+ cl-prompt> (<b>find-variable-value</b> '?rest *)
+ <i>(3 4 5)</i>
+ </pre>
+ Without the template denoted by <code>#T(list ...)</code> the
+ unifier would have been utterly confused.</p>
+
+ <p>In the following the full extent of the UNIFICATION facility is
+ described in its main components.
+ </p>
+
+
+ <h2><a href="unifying-substitutions.html">Unifying Substitutions</a></h2>
+
+ <h2><a href="templates.html">The Template Sub-language</a></h2>
+
+ <h2><a href="control-flow.html">Control Flow</a></h2>
+
+ <h2><a href="unification-dictionary.html">The UNIFICATION
+ Dictionary</a></h2>
+
+ <h2>References</h2>
+
+ <p>
+ <a name="R65">[R56]</a> J. A. Robinson, <i>A machine-oriented logic based on the
+ resolution principle</i>, Journal of the ACM, Vol. 12, No. 1,
+ January 1965, Pages 23--49.</p>
+
+
+ <h1></h1>
+ <hr>
+ <em>
+ <p>
+ <b>DISCLAIMER:</b> 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.</p>
+
+ <p>The file <tt>COPYING</tt> 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.
+ </p>
+ </em>
+ <hr>
+
+
+
+<!--
+;;; Copyright (c) 2004-2011 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2011-02-20</strong><br>
+ CL-UNIFICATION is now in <a href="www.quicklisp.org">Quicklisp</a>.
+ <li><strong>2007-11-09</strong><br>
+ Updated.
+ <li><strong>2004-11-04</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2004-2012, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/links.html new-cl-unification-1/docs/html/links.html
--- old-cl-unification-1/docs/html/links.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/links.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,120 @@
+<html>
+ <head>
+ <title>CL Unification Links</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification Links</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link-selected">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Links</h1>
+
+ <p>Here are some links which are pertinent to the
+ <strong>CL-UNIFICATION</strong> project.</p>
+
+ <p>
+ <ul>
+ <li><a href="http://common-lisp.net">common-lisp.net</a>: the host site.</li>
+ <li><a href="http://clocc.sourceforge.net">CLOCC</a>: the site hosting <strong>MK:DEFSYSTEM</strong>.</li>
+ <li><a href="http://mitpress.mit.edu/sicp">Structure and Interpretation of Computer Programs</a>: the SICP site, where inspiration for the unifier can be found.</li>
+ <li><a href="http://www.norvig.com/paip.html">Paradigms of Artificial Intelligence Programming</a>: the PAIP site, where more inspiration for the unifier can be found.</li>
+ </ul>
+ </p>
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-05-20</strong><br>
+ Updated (but not completed) the page.
+ </li>
+
+ <li><strong>2005-04-20</strong><br>
+ Fixed (but not completed) the page.
+ </li>
+
+ <li><strong>2004-04-12</strong><br>
+ Started the site.
+ </li>
+ </ul>
+-->
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/list-template-class.html new-cl-unification-1/docs/html/list-template-class.html
--- old-cl-unification-1/docs/html/list-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/list-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,192 @@
+<html>
+ <head>
+ <title>CL Unification: Class LIST-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class LIST-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>LIST-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ LIST-TEMPLATE, SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The LIST-TEMPLATE class denotes those object that are used
+ to unify against a LIST.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>list</b> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+ <p>The LIST-TEMPLATE syntax denotes a LIST object. A
+ LIST-TEMPLATE must be unified against a LIST object. The elements
+ of the list must be unified against the
+ <i><destructuring template lambda list></i>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>list</b> 0 1 ?x 3 4 5)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>list</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify '("foo" "bar" 42)) #T(<b>list</b> _ _ ?x))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify #(1 2 3) #T(<b>list</b> _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify (list "foo" '?foo 42)) #T(<b>list</b> _ 33 ?x))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?foo e)
+ 33
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a LIST-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>Unifying a LIST-TEMPLATE against a non-proper or circular list has undefined behavior.</p>
+
+ <p>The LIST-TEMPLATE class is the only one that is really needed in
+ order not to implode the overall unification machinery. But, since
+ it is needed, then it is worthwhile to build the whole template
+ hierarchy.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/mailing-lists.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,127 @@
+<html>
+ <head>
+ <title>CL Unification Mailing Lists Page</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="downloads.html" class="navigation-link-selected">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> <div class="sidebar"></div></td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>CL-UNIFICATION Mailing Lists</h1>
+
+
+ <p>There are three mailing lists set up at
+ <a href="http://common-lisp.net">common-lisp.net</a>.
+ <ul>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-announce">cl-unification-announce</a>:
+ low traffic mailing list for announcements about the library.</li>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-devel">cl-unification-devel</a>:
+ mailing list to discuss the development of the library.</li>
+ <li><a
+ href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-unification-cvs">cl-unification-cvs</a>:
+ CVS notifications.</li>
+ </ul>
+
+
+
+
+
+
+
+<!--
+;;; Copyright (c) 2004-2011 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+<!-- <h2>Site Map</h2> -->
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-01-28</strong><br>
+ Updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the site.
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/main.css new-cl-unification-1/docs/html/main.css
--- old-cl-unification-1/docs/html/main.css 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/main.css 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,330 @@
+/*
+ * NYU Bioinformatics - Microarray group development
+ *
+ * Inspired by www.rhythmbox.org, (c) rhythmbox 2002
+ *
+ * New code, modifications
+ * (c) Idan Gazit 2002, and
+ * (c) Marco Antoniotti, 2003-2004
+ * NYU Bioinformatics
+ *
+ * Permission is hereby granted to use this style, etc etc etc.
+ */
+
+body
+{
+ margin: 0;
+ background: #ffffff;
+ font-family: Verdana, Arial, Helvetica;
+ /*font-size:12px;*/
+ font-weight: normal;
+ color:black;
+
+}
+
+a.navigation-link-selected
+{
+ text-decoration: none;
+ color: #ffffff;
+ font-weight: normal;
+ font-style: italic;
+}
+
+a.navigation-link-selected:hover
+{
+ text-decoration: underline;
+ color: #ffffff;
+ font-weight: normal;
+ font-style: italic;
+}
+
+a.navigation-link
+{
+ text-decoration: none;
+ color: rgb(100, 100, 100);
+ font-weight: normal;
+}
+
+a.navigation-link:hover
+{
+ text-decoration: underline;
+ color: #ffffff;
+ font-weight: normal;
+}
+
+a.return
+{
+ text-decoration: none;
+ color: #41286f;
+ font-size: 8pt;
+ font-weight: normal;
+}
+
+a.return:hover;
+{
+ text-decoration: underline;
+ color: #68548D;
+ font-size: 8pt;
+ font-weight: normal;
+}
+
+a
+{
+ text-decoration: underline;
+ color: #41286f;
+}
+
+a:hover
+{
+ text-decoration: underline;
+ color: #68548D;
+}
+
+p
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ font-weight: regular;
+ /* padding-bottom: 10px;
+ margin: 0px; */
+}
+
+.header
+{
+ background: #9ebcb4;
+ /* background-image: url("./images/header_bg_1.gif"); */
+ background-repeat: no-repeat;
+ height: 50px;
+}
+
+.navigation
+{
+ word-spacing: 5px;
+ position: absolute;
+ top: 35px;
+ right: 5px;
+ text-align: right;
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #ffffff;
+ font-weight: normal;
+ word-spacing: 0px;
+ }
+
+
+
+.sidebar
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ font-weight: normal;
+ padding-left: 15px;
+ padding-right: 5px;
+ position: fixed;
+ top: 10ex; right 1em;
+
+}
+
+.text
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ font-weight: normal;
+}
+
+
+
+li
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ font-weight: normal;
+}
+
+
+pre
+{
+ background: 5px;
+ background-color: #e0e0e0;
+}
+
+
+.label
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ text-align: center;
+ font-style: italic;
+}
+
+.command
+{
+ font-family: Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: #000000;
+ background: #eae8e3;
+ font-weight: regular;
+ margin-bottom: 10px;
+}
+
+.content
+{
+ background: #ffffff;
+ padding: 5px;
+ padding-right: 15px;
+}
+
+.toc
+{
+ font-size: 10px;
+ background: #ffffff;
+ padding: 5px;
+ padding-right: 5px;
+}
+
+.middle-bar
+{
+ height: 5px;
+ background: #A497BA;
+}
+
+.black-line
+{
+ height: 1px;
+ background: #000000;
+}
+
+.bottom
+{
+ position: absolute;
+ right: 5px;
+ bottom: 5px;
+}
+
+.copyright
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size: 10px;
+ color: #808080;
+ font-weight: regular;
+ padding:5px;
+ text-align:right;
+ border-color:#808080;
+ border-width:0px;
+ border-style:dotted;
+ border-top-width:1px;
+
+}
+
+.centerblock
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size: 12px;
+ color: black;
+ font-weight: normal;
+}
+
+.tableheader
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:12px;
+ color: white;
+ font-weight:bold;
+ background:#505050;
+ padding: 4px;
+}
+
+.tablerow1
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:12px;
+ color: black;
+ font-weight: normal;
+ background:#e0e0e0;
+ padding:4px;
+}
+
+.tablerow2
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:12px;
+ color: black;
+ font-weight: normal;
+ background:#f0f0f0;
+ padding: 4px;
+}
+
+.tablerow_style
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:12px;
+ color: black;
+ font-weight: normal;
+ background:#f0f0f0;
+ padding: 4px;
+}
+
+h1
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:18px;
+ color: #41286f;
+ font-weight:bold;
+}
+
+h2
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:16px;
+ color: #41286f;
+ font-weight:bold;
+}
+
+h3
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:14px;
+ color: #41286f;
+ font-weight:bold;
+}
+
+h4
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:12px;
+ color: #41286f;
+ font-weight:bold;
+}
+
+h5
+{
+ font-family:Verdana, Arial, Helvetica;
+ font-size:10px;
+ color: #41286f;
+ font-weight:bold;
+}
+
+.captionimg
+{
+ align:right;
+ text-align:right;
+ font-style: italic;
+ font-weight: normal;
+ font-size:10px;
+ color: #303030;
+}
+
+.indent
+{
+ padding-left: 50px;
+}
+
+.command
+{
+ font-family:Courier;
+}
diff -rN -u old-cl-unification-1/docs/html/make-empty-environment-function.html new-cl-unification-1/docs/html/make-empty-environment-function.html
--- old-cl-unification-1/docs/html/make-empty-environment-function.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/make-empty-environment-function.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,130 @@
+<html>
+ <head>
+ <title>CL Unification: Function MAKE-EMPTY-ENVIRONMENT</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function MAKE-EMPTY-ENVIRONMENT</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Function</i> <strong>MAKE-EMPTY-ENVIRONMENT</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>make-empty-environment</b>
+ => <i>unification-environment</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>unification-environment</code></i>---a fresh <i>unification-environment</i>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function MAKE-EMPTY-ENVIRONMENT constructs a new
+ object of type UNIFY:ENVIRONMENT. The new
+ <i>unification-environment</i> is empty, i.e. it does not contain
+ any <em>binding</em>.
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/make-shared-environment-function.html new-cl-unification-1/docs/html/make-shared-environment-function.html
--- old-cl-unification-1/docs/html/make-shared-environment-function.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/make-shared-environment-function.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,144 @@
+<html>
+ <head>
+ <title>CL Unification: Function MAKE-SHARED-ENVIRONMENT</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Function MAKE-SHARED-ENVIRONMENT</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Function</i> <strong>MAKE-SHARED-ENVIRONMENT</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>make-shared-environment</b> <i>env</i>
+ => <i>unification-environment</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>env</code></i>---an <i>unification-environment</i>.
+ <p><i><code>unification-environment</code></i>---a new <i>unification-environment</i>.
+
+
+
+ <h2>Description:</h2>
+
+ <p>The function MAKE-SHARED-ENVIRONMENT constructs a new
+ object of type UNIFY:ENVIRONMENT. The new
+ <i>unification-environment</i> shares the frames already present in <i>env</i>.</p>
+
+ <p>It is guaranteed that extending <i>unification-environment</i>
+ will not change <i>env</i>.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY:ENVIRONMENT, BINDING, FIND-VARIABLE-VALUE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>This function is provided to allow for the construction of
+ "trees" of frames for interpreter-like environments. The macros
+ MATCH, MATCHING, and MATCH-CASE rely on this function, as they
+ immediately construct a "shared" environment.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>MAKE-SHARED-ENVIRONMENT relies on the LIST implementation of
+ environments.</p>
+
+ <p>The use of MAKE-SHARED-ENVIRONMENT in MATCHING and MATDCH-CASE is
+ still incomplete.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-11-04</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/match-case-macro.html new-cl-unification-1/docs/html/match-case-macro.html
--- old-cl-unification-1/docs/html/match-case-macro.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/match-case-macro.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,159 @@
+<html>
+ <head>
+ <title>CL Unification: Macro MATCH-CASE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCH-CASE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Macro</i> <strong>MATCH-CASE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>match-case</b> (<i>object</i> &key <i>errorp</i>) <clause>*</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <clause> ::= <regular clause> | <default clause>
+ <regular clause> ::= (<i>template</i> &body <i>forms</i>)
+ <default clause> ::= (t &body <i>forms</i>)
+ | (otherwise &body <i>forms</i>)
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>MATCH-CASE sets up a CASE-like environment for multiple template matching clauses.
+ Each clause evaluates its forms in an environment where the variables
+ present in the template are bound lexically. Note that both variable
+ names '?FOO' and 'FOO' are bound for convenience.</p>
+
+ <p>The values returned by the MATCH-CASE form are those of the last form in
+ the first clause that satisfies the match test. I.e. the first
+ clause for which the <i>template</i> UNIFYes against <i>object</i>.</p>
+
+ <p>If <i>errorp</i> is non-NIL then if none of the regular clauses matches, then
+ an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of
+ any default clause. Otherwise, the default clause behaves as a
+ standard COND default clause. The default value of <i>errorp</i> is NIL.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> in each clause will
+ <em>not</em> be caught and handled by the enclosing MATCH-CASE block.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
diff -rN -u old-cl-unification-1/docs/html/match-macro.html new-cl-unification-1/docs/html/match-macro.html
--- old-cl-unification-1/docs/html/match-macro.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/match-macro.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,151 @@
+<html>
+ <head>
+ <title>CL Unification: Macro MATCH</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCH</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Macro</i> <strong>MATCH</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>match</b> (<i>template</i> <i>object</i> &key <i>substitution</i> <i>errorp</i> <i>error-value</i>) &body <i>forms</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>
+ MATCH sets up a lexical environment to evaluate <i>forms</i> after a unification operation.
+ MATCH unifies a <i>template</i> and an <i>object</i> and then sets up a lexical
+ environment where the variables present in the template are bound
+ lexically. Note that both variable names '?FOO' and 'FOO' are bound
+ for convenience.</p>
+
+ <p>The MATCH form returns the values returned by the evaluation of the
+ last of the <i>forms</i>.</p>
+
+ <p>If <i>errorp</i> is non-NIL (the default) then the form raises a
+ UNIFICATION-FAILURE, otherwise the result of evaluating <i>error-value</i>,
+ whose default is NIL is returned.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> will also be caught and handled by the enclosing MATCH
+ according to <i>errorp</i> settings.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
diff -rN -u old-cl-unification-1/docs/html/matching-macro.html new-cl-unification-1/docs/html/matching-macro.html
--- old-cl-unification-1/docs/html/matching-macro.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/matching-macro.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,158 @@
+<html>
+ <head>
+ <title>CL Unification: Macro MATCHING</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Macro MATCHING</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Macro</i> <strong>MATCHING</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+
+ <p>
+ <pre>
+ <b>matching</b> (&key <i>errorp</i>) <clause>*</i>
+ => <i>results</i>*
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <clause> ::= <regular clause> | <default clause>
+ <regular clause> ::= ((<i>template</i> <i>object</i>) &body <i>forms</i>)
+ <default clause> ::= (t &body <i>forms</i>)
+ | (otherwise &body <i>forms</i>)
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>unification template</i>
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+ <p><i><code>errorp</code></i>---a <i>generalized boolean</i>
+ <p><i><code>error-value</code></i>---an <i>object</i>
+ <p><i><code>forms</code></i>---an <i>implicit progn</i>
+ <p><i><code>results</code></i>---the <i>values</i> returned by <i>forms</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>MATCHING sets up a COND-like environment for multiple template matching clauses.
+ Each clause evaluates its forms in an environment where the variables
+ present in the template are bound lexically. Note that both variable
+ names '?FOO' and 'FOO' are bound for convenience.</p>
+
+ <p>The values returned by the MATCHING form are those of the last form in
+ the first clause that satisfies the match test.</p>
+
+ <p>If <i>errorp</i> is non-NIL then if none of the regular clauses matches, then
+ an error of type UNIFICATION-NON-EXHAUSTIVE is signalled, regardless of
+ any default clause. Otherwise, the default clause behaves as a
+ standard COND default clause. The default value of <i>errorp</i> is NIL.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>See above.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, UNIFICATION-FAILURE, UNIFICATION-NON-EXHAUSTIVE</p>
+
+ <h2>Notes:</h2>
+
+ <p>Note that UNIFICATION-FAILUREs
+ raising from the evaluation of <i>forms</i> in each clause will
+ <em>not</em> be caught and handled by the enclosing MATCHING block..</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
diff -rN -u old-cl-unification-1/docs/html/nil-template-class.html new-cl-unification-1/docs/html/nil-template-class.html
--- old-cl-unification-1/docs/html/nil-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/nil-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,169 @@
+<html>
+ <head>
+ <title>CL Unification: Class NIL-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NIL-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>NIL-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NIL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NIL-TEMPLATE class denotes those object that are used
+ to unify against NIL.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #Tnil
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T()
+ </pre>
+ </p>
+
+
+ <p>The NIL-TEMPLATE syntax denotes NIL.
+ NIL-TEMPLATE can only unified against NIL.</p>
+
+ <p>The NIL-TEMPLATE is used for symmetry reasons, given that the
+ template hierarchy (almost) mirrors the regular <strong>CL</strong>
+ type hierarchy.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify nil #Tnil))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (setq e (unify 42 #T()))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NIL-TEMPLATE against a non-NIL object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/nth-template-class.html new-cl-unification-1/docs/html/nth-template-class.html
--- old-cl-unification-1/docs/html/nth-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/nth-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,167 @@
+<html>
+ <head>
+ <title>CL Unification: Class NTH-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NTH-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>NTH-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NTH-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NTH-TEMPLATE class denotes those object that are used
+ to unify against a particular element of a LIST.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>nth</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The NTH-TEMPLATE syntax denotes the <i>item</i> at <i>index</i>
+ a LIST. A NTH-TEMPLATE must
+ be unified against a LIST object. <i>item</i> is <em>unified</em>
+ against the element extracted from the sequence object at
+ <i>index</i> by the standard function NTH.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>nth</b> 2 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>nth</b> 42 ?x)))
+ --> Error: index 42 out of bounds. <STRONG>FIX THIS</STRONG>
+
+
+ cl-prompt> (setq e (unify #(a s d) #T(<b>nth</b> 1 ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NTH-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/nthcdr-template-class.html new-cl-unification-1/docs/html/nthcdr-template-class.html
--- old-cl-unification-1/docs/html/nthcdr-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/nthcdr-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,167 @@
+<html>
+ <head>
+ <title>CL Unification: Class NTHCDR-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NTHCDR-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>NTHCDR-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NTHCDR-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NTHCDR-TEMPLATE class denotes those object that are used
+ to unify against a particular CONS of a LIST.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>nthcdr</b> <i>index</i> <i>item</i>)
+ </pre>
+ </p>
+
+ <p>The NTHCDR-TEMPLATE syntax denotes the CONS <i>item</i> at <i>index</i>
+ a LIST. A NTHCDR-TEMPLATE must
+ be unified against a LIST object. <i>item</i> is <em>unified</em>
+ against the element extracted from the LIST object at
+ <i>index</i> by the standard function NTHCDR.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify '(0 1 42 3 4 5) #T(<b>nthcdr</b> 2 ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ (42 3 4 5)
+
+ cl-prompt> (setq e (unify '(0 1 42 3 4 5) #T(<b>nthcdr</b> 42 ?x)))
+ --> Error: index 42 out of bounds. <STRONG>FIX THIS</STRONG>
+
+
+ cl-prompt> (setq e (unify #(a s d) #T(<b>nthcdr</b> 1 ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NTHCDR-TEMPLATE against a non-LIST object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/number-template-class.html new-cl-unification-1/docs/html/number-template-class.html
--- old-cl-unification-1/docs/html/number-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/number-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,184 @@
+<html>
+ <head>
+ <title>CL Unification: Class NUMBER-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class NUMBER-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>NUMBER-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ NUMBER-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The NUMBER-TEMPLATE class denotes those object that are used
+ to unify against a NUMBER.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T42
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>number</b> 42)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<b>number</b> ?num)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T#C(1.2 3.4)
+ </pre>
+ </p>
+
+
+ <p>The NUMBER-TEMPLATE syntax denotes a NUMBER.
+ NUMBER-TEMPLATEs can only unified against a NUMBER.</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify 42 #T42))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (setq e (unify 42 #T()))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setf e (unify 42 #T(<b>number</b> ?num)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?num e)
+ 42
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an NUMBER-TEMPLATE against a non-NUMBER object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>There is no COMPLEX-NUMBER-TEMPLATE class, although a case for it can be easily made.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/sequence-template-class.html new-cl-unification-1/docs/html/sequence-template-class.html
--- old-cl-unification-1/docs/html/sequence-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/sequence-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,202 @@
+<html>
+ <head>
+ <title>CL Unification: Class SEQUENCE-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SEQUENCE-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>SEQUENCE-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SEQUENCE-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ VECTOR-TEMPLATE, LIST-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SEQUENCE-TEMPLATE class denotes those object that are used
+ to unify against a SEQUENCE.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>sequence</b> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+ <p>The SEQUENCE-TEMPLATE syntax denotes a SEQUENCE object. A
+ SEQUENCE-TEMPLATE must be unified against a SEQUENCE object. The elements
+ of the sequence must be unified against the
+ <i><destructuring template lambda list></i>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>sequence</b> 0 1 ?x 3 4 5)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>sequence</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(<b>sequence</b> _ _ ?x))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setq e (unify (list "foo" "bar" 42) #T(<b>sequence</b> _ &rest ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ ("bar" 42)
+
+ cl-prompt> (setq e (unify "I am a string" #T(<b>sequence</b> ?I _ &rest ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ "am a string"
+ T
+
+ cl-prompt> (find-variable-value '?I e)
+ #\I
+ T
+
+ cl-prompt> (setq e (unify 42 #T(<b>sequence</b> _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" ?foo 42)) #T(<b>sequence</b> _ 33 ?x))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?foo e)
+ 33
+ T
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an SEQUENCE-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/standard-object-template-class.html new-cl-unification-1/docs/html/standard-object-template-class.html
--- old-cl-unification-1/docs/html/standard-object-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/standard-object-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,227 @@
+<html>
+ <head>
+ <title>CL Unification: Class STANDARD-OBJECT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STANDARD-OBJECT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>STANDARD-OBJECT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STANDARD-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STANDARD-OBJECT-TEMPLATE class denotes those object that are used
+ to unify against any STANDARD-OBJECT.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<i><<strong>CL</strong> class designator></i> <i><slot spec></i>*)
+
+ <i><slot spec></i> ::= <i><reader method></i> <i><object></i>
+ | (slot-value <i><slot name></i>) <i><object></i>
+ </pre>
+ </p>
+
+ <p>The STANDARD-OBJECT-TEMPLATE syntax denotes any
+ <strong>CL</strong> object that is an instance of a
+ STANDARD-OBJECT. The semantic of the template in a unification depends on which
+ <i><slot spec></i>'s appear. In the first case the meaning of
+ <i><slot spec></i> is such that the
+ <i><reader method></i> gets called against the instance
+ against which the STANDARD-OBJECT-TEMPLATE is being UNIFYed. In the
+ second case, SLOT-VALUE is called with the instance being UNIFYed
+ and <i><slot name></i>. The result value of the call to either
+ <i><reader method></i>, or SLOT-VALUE is UNIFYed against
+ <i><object></i>.</p>
+
+ <p><i><object></i> can be any <strong>CL</strong> object,
+ including a TEMPLATE (in which case the unification machinery
+ proceeds recursively.)</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (defclass foo () ((a :initform 42 :accessor foo-a)))
+ #<STANDARD-CLASS FOO XXXXX>
+
+ cl-prompt> (defclass bar (foo) ())
+ #<STANDARD-CLASS BAR XXXXX>
+
+ cl-prompt> (defclass baz ()
+ ((a :reader the-a-in-a-baz)
+ (b :accessor bazb :initarg :b)))
+ #<STANDARD-CLASS BAZ XXXXX>
+
+ cl-prompt> (setf e (unify (make-instance 'foo) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>the-a-in-baz</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>(slot-value b)</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(<em>baz</em> <em>bazb</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>baz</em> <em>foo-a</em> 42)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a STANDARD-OBJECT-TEMPLATE against a non-STANDARD-OBJECT object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+ <p>Unifying a STANDARD-OBJECT-TEMPLATE denoting an instance of class
+ C1 against an instance of class C2, results in
+ an UNIFICATION-FAILURE error being signaled, when C1 is not in the
+ class precedence list of C2.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/string-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,202 @@
+<html>
+ <head>
+ <title>CL Unification: Class STRING-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STRING-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>STRING-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STRING-TEMPLATE, VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STRING-TEMPLATE class denotes those object that are used
+ to unify against a STRING.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>string</b> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+
+ <p>The STRING-TEMPLATE syntax denotes a STRING object. A
+ STRING-TEMPLATE must be unified against a CHARACTER VECTOR
+ object. The elements of the string must be unified against the
+ <i><destructuring template lambda list></i></p>
+
+ <p>The <i><destructuring template lambda list></i> has a
+ slight different interpretation in this case, in order to provide
+ more flexibility to the user. Ordinarily, each component appearing
+ in a <i><destructuring template lambda list></i> is unified
+ "element-wise" with the underlying SEQUENCE or ARRAY object. In the
+ case of a STRING-TEMPLATE, each component of the
+ <i><destructuring template lambda list></i> is allowed to be a
+ STRING or a STRING-TEMPLATE itself. The STRING or STRING-TEMPLATE
+ is unified against a subsequence of the CHARACTER VECTOR.</p>
+
+
+
+
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify "foobar" #T(<b>string</b> "foob" ?x #\r)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #\a
+
+ cl-prompt> (setq e (unify "foobar" #T(<b>string</b> "FOO" #\b #\a #\r)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify "foobar") #T(<b>string</b> _ _ ?x _ _ _))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #\o
+
+ cl-prompt> (setq e (unify "foobar" #T(<b>string</b> _ &rest ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ "oobar"
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>The value of the variable *UNIFY-STRING-CASE-SENSITIVE-P*.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an STRING-TEMPLATE against a non CHARACTER VECTOR object
+ results in an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>The STRING-TEMPLATE class and the relevant UNIFY methods have not
+ been implemented yet.</p>
+
+ <p>The actual semantics of the STRING-TEMPLATE class is not
+ completely clear yet.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/structure-object-template-class.html new-cl-unification-1/docs/html/structure-object-template-class.html
--- old-cl-unification-1/docs/html/structure-object-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/structure-object-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,205 @@
+<html>
+ <head>
+ <title>CL Unification: Class STRUCTURE-OBJECT-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class STRUCTURE-OBJECT-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>STRUCTURE-OBJECT-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ STRUCTURE-OBJECT-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STRUCTURE-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The STRUCTURE-OBJECT-TEMPLATE class denotes those object that are used
+ to unify against any STRUCTURE-OBJECT.</p>
+
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<i><<strong>CL</strong> structure class designator></i> [<i><reader function></i> <i><object></i>]*)
+ </pre>
+ </p>
+
+ <p>The STRUCTURE-OBJECT-TEMPLATE syntax denotes any
+ <strong>CL</strong> object that is an instance of a
+ STRUCTURE-OBJECT. The syntax is such that the <i><reader
+ function></i> gets called against the instance against
+ which the STRUCTURE-OBJECT-TEMPLATE is being UNIFYed.
+ <i><object></i> can be any <strong>CL</strong> object,
+ including a TEMPLATE (in which case the unification machinery
+ proceeds recursively.)</p>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (defstruct foo () (a 42))
+ FOO
+
+ cl-prompt> (defstruct (baz (:include foo)) (b 33))
+ BAZ
+
+ cl-prompt> (setf e (unify (make-foo) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (setf e (unify (make-baz) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>foo</em> <em>foo-a</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz) #T(<em>baz</em> <em>the-a-in-baz</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'baz :b '?e) #T(<em>baz</em> <em>bazb</em> 42)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (setf e (unify (make-instance 'bar) #T(<em>baz</em> <em>foo-a</em> 42)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying a STRUCTURE-OBJECT-TEMPLATE against a non-STRUCTURE-OBJECT object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+ <p>Unifying a STRUCTURE-OBJECT-TEMPLATE denoting an instance of structure
+ S1 against an instance of structure S2, results in
+ an UNIFICATION-FAILURE error being signaled, when S1 is not in the
+ class precedence list of S2.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/subseq-template-class.html new-cl-unification-1/docs/html/subseq-template-class.html
--- old-cl-unification-1/docs/html/subseq-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/subseq-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,179 @@
+<html>
+ <head>
+ <title>CL Unification: Class SUBSEQ-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SUBSEQ-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>SUBSEQ-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SUBSEQ-TEMPLATE, ELEMENT-TEMPLATE, EXPRESSION-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SUBSEQ-TEMPLATE class denotes those object that are used
+ to unify against a particular element of an ARRAY.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>subseq</b> <i>start</i> <i>end</i> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+
+ <p>The SUBSEQ-TEMPLATE syntax is used to unify the elements of a
+ SEQUENCE starting from <i>start</i> and below <i>end</i>, against
+ the <i><destructuring template lambda list></i>.</p>
+
+ <p><i>start</i> and <i>end</i> must be supplied and must be valid
+ sequence indexes, i.e. most likely, FIXNUMs; however, <i>end</i> can
+ also be NIL, in which case the usual SUBSEQ semantics applies.</p>
+
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>subseq</b> 2 4 ?x ?y)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+ T
+
+ cl-prompt> (find-variable-value '?y e)
+ 3
+ T
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>subseq</b> 0 4 42 ?x)))
+ --> Error: UNIFICATION-FAILURE
+
+
+ cl-prompt> (setq e (unify "This is a string!" #T(<b>subseq</b> 4 nil &rest ?str)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?str e)
+ " is a string!"
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an SUBSEQ-TEMPLATE against a non-SEQUENCE object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/symbol-template-class.html new-cl-unification-1/docs/html/symbol-template-class.html
--- old-cl-unification-1/docs/html/symbol-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/symbol-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <title>CL Unification: Class SYMBOL-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class SYMBOL-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>SYMBOL-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ SYMBOL-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ None.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The SYMBOL-TEMPLATE class is the class of the objects that UNIFY
+ recognizes as symbol templates.</p>
+
+ <h3>Template Syntax</h3>
+
+ <p>The <i>specification</i> of a SYMBOL-TEMPLATE has one of the two
+ forms below:</p>
+
+ <p><pre>
+ #T<i><symbol></i>
+ </pre>
+
+ or
+
+ <pre>
+ #T(<b>symbol</b> <i><value></i>)
+ </pre>
+
+ where <i>value</i> must be either a <em>unification variable</em> or
+ a SYMBOL.
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+
+ <p>Unifying a SYMBOL-TEMPLATE against a non-SYMBOL object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY, NIL-TEMPLATE</p>
+
+ <h2>Notes:</h2>
+
+ <p>NIL-TEMPLATE should be used to specifically UNIFY against NIL.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- symbol-template-class.html -->
diff -rN -u old-cl-unification-1/docs/html/template-class.html new-cl-unification-1/docs/html/template-class.html
--- old-cl-unification-1/docs/html/template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,138 @@
+<html>
+ <head>
+ <title>CL Unification: Class TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ EXPRESSION-TEMPLATE, TYPE-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>
+ <ul>
+ <li>SPEC<br>
+ Type: (OR SYMBOL CONS)<br>
+ Accessor: TEMPLATE-SPEC<br>
+ Initarg: <code>:spec</code> (default NIL)</li>
+ </ul>
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p>The TEMPLATE class is the root of the <em>template</em> hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
diff -rN -u old-cl-unification-1/docs/html/template-p-function.html new-cl-unification-1/docs/html/template-p-function.html
--- old-cl-unification-1/docs/html/template-p-function.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/template-p-function.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,131 @@
+<html>
+ <head>
+ <title>CL Unification: Standard Generic Function TEMPLATE-P</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-P</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Generic function</i> <strong>TEMPLATE-P</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>template-p</b> <i>object</i>
+ => <i>result</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>object</code></i>---an <i>object</i>
+ <p><i><code>result</code></i>---a <i>generalized boolean</i>
+
+
+
+ <h2>Description:</h2>
+
+ <p>The generic function TEMPLATE-P is the predicate that tests
+ whether an <i>object</i> is of class TEMPLATE. If <i>object</i> is
+ an instance of TEMPLATE or one of its sub-classes, then TEMPLATE-P
+ returns a non-NIL value.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/template-spec-accessor.html new-cl-unification-1/docs/html/template-spec-accessor.html
--- old-cl-unification-1/docs/html/template-spec-accessor.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/template-spec-accessor.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,137 @@
+<html>
+ <head>
+ <title>CL Unification: Accessor TEMPLATE-SPEC</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function TEMPLATE-SPEC</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Accessor</i> <strong>TEMPLATE-SPEC</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>template-spec</b> <i>template</i>
+ => <i>spec</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ (setf (<b>template-spec</b> <i>template</i>) <i>spec</i>)
+ => <i>spec</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>template</code></i>---a <i>template object</i>
+ <p><i><code>spec</code></i>---a <i>symbol</i>, or a <i>cons</i>
+
+
+ <h2>Description:</h2>
+
+ <p>The accessor TEMPLATE-SPEC extracts the <em>template
+ specification</em> <i>spec</i> out of an instance of the class
+ TEMPLATE or one of its sub-classes. The SETF form sets the
+ <i>spec</i>.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>TEMPLATE, the "Template Sub-language" section.</p>
+
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/templates.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,208 @@
+<html>
+ <head>
+ <title>CL Unification Templates</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION TEMPLATES</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>The UNIFICATION TEMPLATES Sub-language</h1>
+
+ <p>The unification machinery relies on a <em>template
+ sub-language</em> to express structural patterns containing
+ <em>unification variables</em>. The template sub-language comprises
+ several objects organized in a hierarchy that parallels most of the
+ standard <strong>CL</strong> type hierarchy.</p>
+
+
+ <h2>Unification Variables</h2>
+
+ <p><em>Unification variables</em> are symbols with a <code>#\?</code> as the
+ first character of the name. This is a rather traditional choice,
+ although a different one based on quoted symbols is possible.
+ Therefore, the following are examples of variables.
+ <pre>
+ ?A ?s ?qwe ?42z ?a-variable-with-a-very-long-name ?_
+ </pre>
+ There are two special variables, <code>?_</code> and <code>_</code>,
+ which are used as anonymous place holders, they match anything, but
+ never appear in a substitution.</p>
+
+ <h3>Destructuring Template Lambda List</h3>
+
+ <p><strong>CL</strong> has the concept of <em>destructuring lambda
+ list</em> which is used in conjunction with the form
+ DSTRUCTURING-BIND, and, to some extent, with LOOP. The unifier
+ machinery relies on a related notion dubbed <em>destructuring
+ template lambda list</em> for lack of a better name.</p>
+
+ <p>A <em>destructuring template lambda list</em> (or just
+ <em>template lambda list</em>) is just like a regular
+ <em>destructuring lambda list</em> (ANSI 3.4.5) with a number of
+ restrictions. The full syntax is the following.</p>
+
+ <p>
+ <pre>
+ template-lambda-list ::= (<reqvars> <optvars> <restvar> <keyvars>)
+ | (<reqvars> <optvars> . <template>)
+
+ reqvars ::= <template>*
+
+ optvars ::= [&optional <template>*]
+
+ restvar ::= [&rest <template>]
+
+ keyvars ::= [&key {<template> | ({<template> | (<keyword-name> <template>)})}*
+ [&allow-other-keys]]
+ </pre>
+ </p>
+
+ <p>Where <i><template></i> is either an object with syntax
+ defined in the next section or it can be a normal
+ <strong>CL</strong> object. The remaining non terminal grammar
+ symbols have the usual <strong>CL</strong> interpretation.</p>
+
+
+
+ <h2>Unification Templates</h2>
+
+ <p>The <em>unification templates</em> are organized in an object
+ hierachy. There is a standard <strong>CLOS</strong> class for each
+ template kind. The hierarchy is shown below.</p>
+
+ <p>
+ <img src="images/unif-templ-hier.gif"></p>
+
+ <p>The template hierarchy is rooted at the TEMPLATE class. There are
+ two <em>kinds</em> of templates: <em>type</em> templates, and
+ <em>expression</em> templates. Type templates are used as patterns
+ of regular objects. Expression templates are used to unify against
+ a specific sub-structure of a given object.</p>
+
+ <p>The predefined templates are:
+ <ul>
+ <li><a href="template-class.html">TEMPLATE</a></li>
+ <li><a href="expression-template-class.html">EXPRESSION-TEMPLATE</a></li>
+ <li><a href="element-template-class.html">ELEMENT-TEMPLATE</a></li>
+ <li><a href="aref-template-class.html">AREF-TEMPLATE</a></li>
+ <li><a href="elt-template-class.html">ELT-TEMPLATE</a></li>
+ <li><a href="nth-template-class.html">NTH-TEMPLATE</a></li>
+
+ <li><a href="subseq-template-class.html">SUBSEQ-TEMPLATE</a></li>
+
+ <li><a href="type-template-class.html">TYPE-TEMPLATE</a></li>
+ <li><a href="array-template-class.html">ARRAY-TEMPLATE</a></li>
+
+ <li><a href="sequence-template-class.html">SEQUENCE-TEMPLATE</a></li>
+
+ <li><a href="list-template-class.html">LIST-TEMPLATE</a></li>
+
+ <li><a href="vector-template-class.html">VECTOR-TEMPLATE</a></li>
+
+ <li><a href="string-template-class.html">STRING-TEMPLATE</a></li>
+
+ <li><a href="nil-template-class.html">NIL-TEMPLATE</a></li>
+
+ <li><a href="number-template-class.html">NUMBER-TEMPLATE</a></li>
+
+ <li><a href="standard-object-template-class.html">STANDARD-OBJECT-TEMPLATE</a></li>
+ <li><a href="structure-object-template-class.html">STRUCTURE-OBJECT-TEMPLATE</a></li>
+
+ <li><a href="symbol-template-class.html">SYMBOL-TEMPLATE</a></li>
+ </ul>
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-09</strong><br>
+ Document created
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/type-template-class.html new-cl-unification-1/docs/html/type-template-class.html
--- old-cl-unification-1/docs/html/type-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/type-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,132 @@
+<html>
+ <head>
+ <title>CL Unification: Class TYPE-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class TYPE-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>TYPE-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ ARRAY-TEMPLATE, NIL-TEMPLATE, NUMBER-TEMPLATE, SEQUENCE-TEMPLATE,
+ STANDARD-OBJECT-TEMPLATE, STRUCTURE-OBJECT-TEMPLATE, SYMBOL-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The TYPE-TEMPLATE class is the root of the <em>type template</em> sub-hierarchy.</p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/unification-dictionary.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,143 @@
+<html>
+ <head>
+ <title>CL Unification Dictionary</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFICATION Dictionary</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="index.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Common Lisp Extensions: UNIFICATION Dictionary</h1>
+
+ <ul>
+ <li><a href="unify-package.html"><i>Package</i> <b>CL.EXT.DACF.UNIFICATION</b></a>
+ <li><a href="unify-function.html"><i>Generic function</i> <b>UNIFY</b></a>
+ <li><a href="usci-variable.html"><i>Variable</i> <b>*UNIFY-STRING-CASE-SENSITIVE*</b></a>
+
+ <li><a href="template-class.html"><i>Class</i> <b>TEMPLATE</b></a>
+ <li><a href="expression-template-class.html"><i>Class</i> <b>EXPRESSION-TEMPLATE</b></a>
+ <li><a href="element-template-class.html"><i>Class</i> <b>ELEMENT-TEMPLATE</b></a></li>
+ <li><a href="aref-template-class.html"><i>Class</i> <b>AREF-TEMPLATE</b></a></li>
+ <li><a href="elt-template-class.html"><i>Class</i> <b>ELT-TEMPLATE</b></a></li>
+ <li><a href="nth-template-class.html"><i>Class</i> <b>NTH-TEMPLATE</b></a></li>
+ <li><a href="nthcdr-template-class.html"><i>Class</i> <b>NTHCDR-TEMPLATE</b></a></li>
+
+ <li><a href="type-template-class.html"><i>Class</i> <b>TYPE-TEMPLATE</b></a>
+
+ <li><a href="array-template-class.html"><i>Class</i> <b>ARRAY-TEMPLATE</b></a></li>
+ <li><a href="nil-template-class.html"><i>Class</i> <b>NIL-TEMPLATE</b></a>
+ <li><a href="number-template-class.html"><i>Class</i> <b>NUMBER-TEMPLATE</b></a></li>
+ <li><a href="symbol-template-class.html"><i>Class</i> <b>SYMBOL-TEMPLATE</b></a>
+
+ <li><a href="standard-object-template-class.html"><i>Class</i> <b>STANDARD-OBJECT-TEMPLATE</b></a></li>
+ <li><a href="structure-object-template-class.html"><i>Class</i> <b>STRUCTURE-OBJECT-TEMPLATE</b></a></li>
+
+ <li><a href="make-template-function.html"><i>Function</i> <b>MAKE-TEMPLATE</b></a>
+ <li><a href="template-p-function.html"><i>Generic function</i> <b>TEMPLATE-P</b></a>
+ <li><a href="template-spec-accessor.html"><i>Accessor</i> <b>TEMPLATE-SPEC</b></a>
+ <li><a href="hash-t-read-macro.html"><i>Reader Macro</i> <b>#T</b></a>
+ <li><a href="make-empty-environment-function.html"><i>Function</i> <b>MAKE-EMPTY-ENVIRONMENT</b></a>
+ <li><a href="find-variable-value-function.html"><i>Function</i> <b>FIND-VARIABLE-VALUE</b></a>
+ <li><a href="match-macro.html"><i>Macro</i> <b>MATCH</b></a>
+ <li><a href="matching-macro.html"><i>Macro</i> <b>MATCHING</b></a>
+ <li><a href="match-case-macro.html"><i>Macro</i> <b>MATCH-CASE</b></a>
+ </ul>
+
+
+<!--
+;;; Copyright (c) 2004-2005 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+<!-- <h2>Site Map</h2> -->
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2005-05-20</strong><br>
+ Page updated.
+ <li><strong>2004-05-05</strong><br>
+ Started the page.
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/unify-function.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,400 @@
+<html>
+ <head>
+ <title>CL Unification: Standard Generic Function UNIFY</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Standard Generic Function UNIFY</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Generic function</i> <strong>UNIFY</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Syntax:</h2>
+
+ <p>
+ <pre>
+ <b>unify</b> <i>object1</i> <i>object2</i> &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <h3>Arguments and Values:</h3>
+
+ <p><i><code>object1</code></i>---an <i>object</i>
+ <p><i><code>object2</code></i>---an <i>object</i>
+ <p><i><code>substitution</code></i>---a <i>substitution</i>
+
+
+
+
+ <h2>Description:</h2>
+
+ <p>The generic function UNIFY is the entry point in the unification
+ machinery. It takes two <strong>CL</strong> objects, <i>object1</i>
+ and <i>object2</i> and checks whether they can be <em>unified</em>
+ by constructing a (possibly empty) consistent substitution assigning
+ appropriate values to the <em>unification variables</em> appearing
+ each object. The rules by which the unification process is carried
+ on are dependent on the types of the two objects. The known rules
+ are described in the <a href="#known_methods">"known methods"</a>
+ section.</p>
+
+ <p>UNIFY takes a <em>substitution</em> as an optional argument. The
+ default value is a <em>fresh</em> empty substitution obtained by
+ calling MAKE-EMPTY-ENVIRONMENT.</p>
+
+ <h3><a name="known_methods">Known Methods</a>:</h3>
+
+ <p>Note that UNIFY is commutative in its two required arguments. Each
+ method listed exists also with <i>object1</i> and <i>object2</i>
+ reversed.</p>
+
+ <p>First, the methods defined on standard <strong>CL</strong> types
+ are described, and then all the methods involving <em>unification
+ templates</em> are described.</p>
+
+
+ <p>
+ <ul>
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> symbol) (<i>s2</i> symbol) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>The unification of two symbols depends on whether one (or both)
+ of them is a unification variable (i.e. either the symbol with name
+ <code>"_"</code>, or a symbol with name starting with the character
+ <code>#\?</code>.)</p>
+
+ <p>If neither object is an unification variable, then UNIFY succeds
+ if and only if the two symbols <i>s1</i> and <i>s2</i> are EQ.</p>
+
+ <p>If <i>s1</i> is an unification variable, and either <i>s1</i> is not
+ bound in <i>substitution</i>, or <i>s1</i> is bound to <i>s2</i>
+ then UNIFY succeds. If <i>s1</i> was not bound in the
+ <i>substitution</i>, then a new binding for <i>s1</i> to <i>s2</i>
+ is created.</p>
+
+ <p>The symmetric case holds if <i>s1</i> is not an unification
+ variable but <i>s2</i> is.</p>
+
+ <p>Otherwise an error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>v</i> symbol) (<i>object</i> t) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>The symbol <i>v</i> must be an unification variable. If not, an
+ error of type UNIFICATION-FAILURE will be signaled.
+ Otherwise, the a new binding for the variable <i>v</i> with value
+ <i>object</i> will be created in the <i>substitution</i>.<p>
+
+ <p>The creation of the new binding for <i>v</i> in the
+ <i>substitution</i> is dependent on the <em>occur check</em>
+ implemented by the generic function OCCURS-IN-P. OCCURS-IN-P is
+ called by the unification machinery if the variable
+ *OCCURRENCE-CHECK-P* is non-NIL (the default.) If
+ *OCCURENCE-CHECK-P* is non-NIL, and if the variable
+ <i>v</i> <em>occurs</em> in the <i>object</i> (i.e. OCCURS-IN-P
+ returns a non-NIL value,) then an error of type UNIFICATION-FAILURE
+ is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>n1</i> number) (<i>n2</i> number) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two numbers unify if and only if they are =, in which case
+ <i>substitution</i> is returned unmodified. Otherwise, an error of
+ type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> string) (<i>s2</i> string) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two strings unify only is they are "equal", under the following
+ condition. If the variable *UNIFY-STRING-CASE-SENSITIVE-P* is T
+ (the default) then the two strings <i>s1</i> and <i>s2</i> are
+ compared using STRING=, otherwise they are compared using STRING-EQUAL.
+ </p>
+
+ <p>If the two strings <i>s1</i> and <i>s2</i> are equal then
+ <i>substitution</i> is returned unchanged, otherwise an error of type
+ UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>v1</i> vector) (<i>v2</i> vector) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <b>unify</b> (<i>l1</i> list) (<i>l2</i> list) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ <b>unify</b> (<i>s1</i> sequence) (<i>s2</i> sequence) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>The "sequence" methods (and the specialized ones, mostly for
+ efficiency) extend the <i>substitution</i> by calling UNIFY
+ recursively on each element of the two sequences, <i>s1</i> and
+ <i>s2</i> (respectively, <i>l1</i> and <i>l2</i>, <i>v1</i> and
+ <i>v2</i>.)
+ </p>
+
+ <p>An error of type UNIFICATION-FAILURE is signaled if the two
+ sequences are of different LENGTH or if any call to
+ UNIFY fails.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>a1</i> array) (<i>a2</i> array) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>Two arrays <i>a1</i> and <i>a2</i> UNIFY if and only if each of
+ the respective elements does. The two arrays are traversed using
+ ROW-MAJOR-AREF. Otherwise an error of type UNIFICATION-FAILURE is
+ signaled.</p>
+
+ <p>An error of type UNIFICATION-FAILURE is also signaled if the two
+ arrays have different total size (as returned by ARRAY-TOTAL-SIZE.)</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>object1</i> t) (<i>object2</i> t) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This is the catch all method that is called as a last resort.
+ No recursive call to UNIFY is attempted, and the call succeeds if and
+ only if <i>object1</i> and <i>object2</i> are EQUALP. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ </ul>
+ </p>
+
+ <p>The next methods all involve a <em>unification template</em>.
+ Again all these methods are commutative in their required
+ arguments.</p>
+
+ <p>
+ <ul>
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s</i> structure-object) (<i>st</i> structure-object-template) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This method UNIFYs a <i>s</i> against a STRUCTURE-OBJECT-TEMPLATE
+ <i>st</i>. <i>st</i> has the following (general) structure.</p>
+ <pre>
+ (<i><structure-class specifier></i> [ (<i><reader></i> <i><value></i>) ]* )
+ </pre></p>
+
+ <p>The <i>structure-class specifier</i> is a symbol naming a
+ structure class, <i>reader</i> is one of the DEFSTRUCT-generated
+ accessors, and <i>value</i> is a regular <strong>CL</strong> object,
+ a unification variable, or a <em>unification template</em>.</p>
+
+ <p>The class of <i>s</i> must be a subclass of <i>structure-class
+ specifier</i>. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+ <p>UNIFY
+ is called recursively on each <i>value</i> and the result of
+ applying <i>reader</i> to <i>s</i>.</p>
+
+ <p>If all the (recursive) calls to UNIFY succeed, then a possibly
+ augmented <i>substitution</i> is returned. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+
+ <li>
+ <p>
+ <pre>
+ <b>unify</b> (<i>s</i> standard-object) (<i>st</i> standard-object-template) &optional <i>substitution</i>
+ => <i>substitution</i>
+ </pre>
+ </p>
+
+ <p>This method UNIFYs a <i>s</i> against a STANDARD-OBJECT-TEMPLATE
+ <i>st</i>. <i>st</i> has the following (general) structure.</p>
+ <pre>
+ (<i><standard-class specifier></i> [ ([slot-value | slot-accessor] <i><slot-spec></i> <i><value></i>) ]* )
+ </pre></p>
+
+ <p>The <i>standard-class specifier</i> is a symbol naming a
+ class, <i>slot-spec</i> is a valid slot accessor when
+ <code>slot-value</code> is specified, or a valid slot name for the
+ class, when <code>slot-value</code> is specified, and <i>value</i>
+ is a regular <strong>CL</strong> object,
+ a unification variable, or a <em>unification template</em>.</p>
+
+ <p>The class of <i>s</i> must be a subclass of <i>standard-class
+ specifier</i>. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+ <p>UNIFY
+ is called recursively on each <i>value</i> and the result of
+ extracting the slot value from <i>s</i> using either the accessor
+ supplied, or SLOT-VALUE.</p>
+
+ <p>If all the (recursive) calls to UNIFY succeed, then a possibly
+ augmented <i>substitution</i> is returned. Otherwise, an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+ </li>
+
+ </ul>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>If <i>object1</i> and <i>object2</i> cannot be unified, then an
+ error of type UNIFICATION-FAILURE is signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>MAKE-EMPTY-ENVIRONMENT, UNIFICATION-FAILURE,
+ *UNIFY-STRING-CASE-SENSITIVE-P*, OCCURS-IN-P,
+ *OCCURENCE-CHECK-P*.</p>
+
+ <h2>Notes:</h2>
+
+ <p>The unification algorithm implemented is very flexible and
+ provides many hooks for customization. However, it is not
+ necessarily asymptotically efficient (it has a worst case
+ exponential time complexity.)</p>
+
+ <p>It would be interesting to reimplement the kernel of the system
+ using a linear unification algorithm like the one described in<p>
+
+ <p>[MM82] A. Martelli and U. Montanari, <i>An Efficient Unification
+ Algorithm</i>, ACM Transactions on Programming Languages and
+ Systems, Vol. 4, No. 2, April 1982, Pages 258--282.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff -rN -u old-cl-unification-1/docs/html/unify-package.html new-cl-unification-1/docs/html/unify-package.html
--- old-cl-unification-1/docs/html/unify-package.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/unify-package.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,115 @@
+<html>
+ <head>
+ <title>CL Unification: Package CL.EXT.DACF.UNIFICATION</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Package CL.EXT.DACF.UNIFICATION</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="../../../images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="../../../images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="../../../images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Package</i> <strong>CL.EXT.DACF.UNIFICATION</strong></h1>
+
+ <h2>Nicknames:</h2>
+
+ <p><code>UNIFY</code></p>
+
+ <h2>Uses:</h2>
+
+ <p><code>COMMON-LISP</code></p>
+
+
+ <h2>Description:</h2>
+
+ <p>This package contains all the definitions necessary for the general
+ Common Lisp unifier to work.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>None.</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-04-12</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/unifying-substitutions.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,197 @@
+<html>
+ <head>
+ <title>CL Unifying Substitutions</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Extensions: UNIFYING SUBSTITUTIONS</i><string>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link-selected">Home</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>Unifying Substitutions</h1>
+
+ <p>The central notion of every unification machinery is that of
+ <em>unifying substitution</em>. A unifying substitution - or
+ <em>environment</em> - is a
+ mapping from <em>variable names</em> (or <em>variables</em>) to
+ <em>values</em> (which can be variables themselves.)</p>
+
+ <p>The generic function UNIFY, and several other functions and macros
+ in the package accept unifying substitutions as parameters, and
+ return them as values.</p>
+
+ <p>There are several notations to describe such unifying
+ substitutions. The one chosen here is simply the following:</p>
+
+ <p>
+ <pre>
+ {x<sub>1</sub> -> y<sub>1</sub>, x<sub>2</sub> -> y<sub>2</sub>, ..., x<sub>k</sub> -> y<sub>k</sub>}
+ </pre>
+ </p>
+
+ <p>The UNIFY library has a number of functions and data structures
+ that can be used to construct and manipulate unifying substitutions.</p>
+
+ <p>In order to facilitate the construction of interpreter-like
+ programs the UNIFICATION library provides data structures
+ representing <em>bindings</em>, <em>frames</em>, and
+ <em>environments</em> - i.e. the unifying substitions proper.</p>
+
+ <ul>
+ <li><em>Bindings</em>
+
+ <p>A <em>binding</em> simply represent the mapping between a variable and a
+ value.</p>
+
+ <p>
+ <pre>
+ <i>binding</i>: <i>variable</i> --> <i>value</i>
+ </pre>
+ </p>
+
+ <li><em>Frames</em>
+
+ <p>A <em>frame</em> is simply a collection of bindings.</p>
+
+ <p>
+ <pre>
+ <i>frame</i>: {<i>binding</i><sub>i</sub>}
+ </pre>
+ </p>
+
+
+ <li><em>Environments</em>
+
+ <p>An <em>environment</em> is simply a stack of frames.</p>
+
+ <p>
+ <pre>
+ <i>environment</i>: <<i>frame</i><sub>0</sub>, <i>frame</i><sub>1</sub>, ..., <i>frame</i><sub>k</sub>>
+ </pre>
+ </p>
+ </ul>
+
+ <p>The collection of operators described hereafter manipulates these
+ opaque data structures.</p>
+
+ <h1>Unifying Substitutions Dictionary</h1>
+
+ <ul>
+ <li><a href="find-variable-value-function.html">FIND-VARIABLE-VALUE</a></li>
+ <li><a href="make-empty-environment-function.html">MAKE-EMTPY-ENVIRONMENT</a></li>
+ <li><a href="make-shared-environment-function.html">MAKE-SHARED-ENVIRONMENT</a></li>
+
+ </ul>
+
+
+
+ <h1>Notes</h1>
+
+ <h2>Current Implementation Details</h2>
+
+ <p>The current implementation is rather straightforward. A binding
+ is a CONS, a frame is a wrapper around an A-LIST, and an environment
+ is a wrapper around a LIST (stack) of frames.</p>
+
+
+ <h2>Functional Style Unifying Substitutions</h2>
+
+ <p>There are very elegant implementations of unification and
+ substitutions based on curried functions. A typical exercise in
+ functional programming using ML or a similar language is to write a
+ simplified Milner Type Checker. Writing the unifying substitution
+ support can be achieved by using curried functions in that context.</p>
+
+
+<!--
+;;; Copyright (c) 2004 Marco Antoniotti, All rigths reserved.
+;;;
+;;; Permission to use, modify, and redistribute this code is hereby
+;;; granted.
+;;; The code is provided AS IS with NO warranty whatsoever. The author
+;;; will not be held liable etc etc etc etc etc.
+-->
+
+ <h2>Site Map</h2>
+
+
+ <p>Enjoy!</p>
+
+
+
+ <hr>
+ <p>Questions? Queries? Suggestions? Comments? Please direct them
+ at <a href="mailto:marcoxa_PROVA_A_SPAMMARME@alu.org">me</a>.
+ </p>
+
+ </div>
+ </div>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+<!-- <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Document created
+ </li>
+ </ul>
+-->
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2011, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/usci-variable.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,129 @@
+<html>
+ <head>
+ <title>CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P*</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Variable *UNIFY-STRING-CASE-SENSITIVE-P*</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Variable</i> <strong>*UNIFY-STRING-CASE-SENSITIVE-P*</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Value Type:</h2>
+
+ <p>
+ A <i>generalized boolean</i>.
+ </p>
+
+
+ <h2>Initial Value:</h2>
+
+ <p>
+ NIL
+ </p>
+
+
+ <h2>Description:</h2>
+
+ <p>The value of *UNIFY-STRING-CASE-SENSITIVE-P* controls the
+ behavior of the UNIFY method with signature <code>(<i>string</i> <i>string</i>)</code>.
+ 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.</p>
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>None.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+ <h2>Notes:</h2>
+
+ <p>None.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-06-11</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- usci-variable.html -->
diff -rN -u old-cl-unification-1/docs/html/vector-template-class.html new-cl-unification-1/docs/html/vector-template-class.html
--- old-cl-unification-1/docs/html/vector-template-class.html 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/docs/html/vector-template-class.html 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,194 @@
+<html>
+ <head>
+ <title>CL Unification: Class VECTOR-TEMPLATE</title>
+ <link rel="stylesheet" href="main.css">
+ </head>
+
+ <body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bgcolor="#ffffff">
+
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" vspace="0" hspace="0">
+ <tr>
+ <td colspan="3">
+ <div class="header"
+ style="font-family:=Verdana,Arial,Helvetica; font-size: 18px; color: #41286f;">
+ <strong><i>CL Unification: Class VECTOR-TEMPLATE</title></i></strong>
+ <div class="navigation">
+ <a href="index.html" class="navigation-link">Home</a>
+ | <a href="unification-package.html" class="navigation-link">Previous</a>
+ | <a href="index.html" class="navigation-link">Next</a>
+ | <a href="downloads.html" class="navigation-link">Downloads</a>
+ | <a href="links.html" class="navigation-link">Links</a>
+ </div>
+ </div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ <div class="middle-bar"><img src="images/shim.gif" height="5" width="1"></div>
+ <div class="black-line"><img src="images/shim.gif" height="1" width="1"></div>
+ </td>
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1><i>Class</i> <strong>VECTOR-TEMPLATE</strong></h1>
+
+ <h2>Package:</h2>
+
+ <p><code>COMMON-LISP.EXTENSIONS.DATA-AND-CONTROL-FLOW.UNIFICATION</code></p>
+
+
+ <h2>Class Precedence List:</h2>
+
+ <p>
+ VECTOR-TEMPLATE, SEQUENCE-TEMPLATE, ARRAY-TEMPLATE, TYPE-TEMPLATE, TEMPLATE, STANDARD-OBJECT, T.
+ </p>
+
+ <h2>Known Subclasses:</h2>
+
+ <p>
+ STRING-TEMPLATE.
+ </p>
+
+
+ <h2>Slots:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Description:</h2>
+
+ <p>The VECTOR-TEMPLATE class denotes those object that are used
+ to unify against a VECTOR.</p>
+
+ <h3>Template Syntax:</h3>
+
+ <p>
+ <pre>
+ #T(<b>vector</b> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+ <p>
+ <pre>
+ #T(<i><<strong>CL</strong> vector type specifier></i> . <i><destructuring template lambda list></i>)
+ </pre>
+ </p>
+
+
+ <p>The VECTOR-TEMPLATE syntax denotes a VECTOR object. A
+ VECTOR-TEMPLATE must be unified against an VECTOR object. The elements
+ of the array must be unified against the
+ <i><destructuring template lambda list></i>
+
+
+ <h2>Examples:</h2>
+
+ <p>
+ <pre>
+ cl-prompt> (setf e (unify #(0 1 42 3 4 5) #T(<b>vector</b> 0 1 ?x 3 4 5)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #(0 1 42 3 4 5) #T(<b>vector</b> 0 1 "FOO" 3 4 5)))
+ --> Error: UNIFICATION-FAILURE
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42)) #T(<b>vector</b> _ _ ?x))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ 42
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42) #T(<b>vector</b> _ &rest ?x)))
+ #<ENVIRONMENT xxx>
+
+ cl-prompt> (find-variable-value '?x e)
+ #("bar" 42)
+
+ cl-prompt> (setq e (unify #("foo" "bar" 42) #T((<b>vector</b> fixnum) _ &rest ?x)))
+ --> Error: UNIFICATION-FAILURE
+ </pre>
+ </p>
+
+
+ <h2>Affected By:</h2>
+
+ <p>None.</p>
+
+
+ <h2>Exceptional Situations:</h2>
+
+ <p>Unifying an VECTOR-TEMPLATE against a non-VECTOR object results in
+ an UNIFICATION-FAILURE error being signaled.</p>
+
+
+ <h2>See Also:</h2>
+
+ <p>UNIFY</p>
+
+
+ <h2>Notes:</h2>
+
+ <h3>ARRAY Structural Properties</h3>
+
+ <p>There is no way to "unify" against structural properties of
+ vectors like fill pointers and displacements.</p>
+
+ <h3>Current Implementation Note</h3>
+
+ <p>Type checking for templates like
+ <code>#T((<b>vector</b> fixnum) 1 2 3)</code>
+ is not yet implemented.</p>
+
+ </td>
+
+ <!-- <td height="100%"> </td> -->
+ </tr>
+
+ <tr height="100%">
+ <td height="100%"> </td>
+ <td valign="top" width="80%" height="100%">
+
+ <div class="content">
+ <div class="text" style="padding-top: 10px;">
+
+ <h1>News</h1>
+
+ <p>News in chronological order, most recent on top.
+ </p>
+
+ <ul>
+ <li><strong>2004-10-30</strong><br>
+ Completed description.
+ </li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </td>
+
+ <td height="100%"> </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td colspan="3" valign="bottom" align="right">
+ <div class="copyright">
+ © 2003-2004, Marco Antoniotti, all rights reserved.
+ </div>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
+
+<!-- end of file -- expression-template-class.html -->
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/lambda-list-parsing.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,301 @@
+;;; -*- Mode: Lisp -*-
+
+;;; lambda-list-parsing.lisp --
+
+;;;; See file COPYING for copyright licensing information.
+
+(in-package "UNIFY")
+
+
+(declaim (inline type-is-t-p))
+
+(defun type-is-t-p (type-spec)
+ (nth-value 0 (and (subtypep type-spec t) (subtypep t type-spec))))
+
+
+(declaim (inline type-specifier-p))
+
+(defun type-specifier-p (x)
+ (nth-value 0 (ignore-errors (subtypep x t))))
+
+(defun normalize-lambda-list (lambda-list)
+ (mapcar (lambda (lambda-element)
+ (etypecase lambda-element
+ (symbol lambda-element)
+ (cons (first lambda-element))))
+ lambda-list))
+
+
+(defstruct lambda-var-info
+ (name nil :read-only t)
+ (type t :read-only t)
+ )
+
+(defstruct (optional-lambda-var-info (:include lambda-var-info))
+ (default-value nil :read-only t)
+ (name-for-supplied-indicator nil :read-only t)
+ )
+
+(defstruct (aux-lambda-var-info (:include optional-lambda-var-info)))
+
+(defstruct (key-lambda-var-info (:include optional-lambda-var-info))
+ (keyword-name nil :read-only t)
+ )
+
+(defstruct (rest-lambda-var-info (:include lambda-var-info)
+ (:constructor make-rest-lambda-var-info (&key
+ name
+ (type 'list)
+ (element-type t))))
+ (element-type t :read-only t)
+ )
+
+;;; The next function is really implementation-dependent, give the
+;;; definition of LAMBDA-LIST-KEYWORDS.
+
+
+(define-condition lambda-list-parsing-error (program-error)
+ ((item :reader lambda-list-parsing-error-item
+ :initarg :item)
+ )
+ (:report (lambda (llpe stream)
+ (format stream "Error while parsing an extended lambda-list (at ~S.)"
+ (lambda-list-parsing-error-item llpe))))
+ )
+
+
+(defun symbol-or-cons-p (x)
+ (or (symbolp x) (consp x)))
+
+
+(defun parse-extended-ordinary-lambda-list (lambda-list
+ &key
+ (ordinary-variable-test #'symbolp)
+ (optional-variable-test #'symbol-or-cons-p)
+ (rest-variable-test #'symbolp)
+ (key-variable-test #'symbol-or-cons-p)
+ (aux-variable-test #'symbol-or-cons-p)
+ )
+ (let ((vars ())
+ (optionals ())
+ (keywords ())
+ (rest ())
+ (auxiliary ())
+ )
+ (labels ((parse-named-arguments (lambda-list &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (parse-optional-arguments (rest lambda-list)))
+ (&key (parse-keyword-arguments (rest lambda-list)))
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))
+ (&rest (parse-rest-arguments (rest lambda-list)))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((funcall ordinary-variable-test head)
+ (push head vars)
+ (parse-named-arguments (rest lambda-list)))
+ (t (error 'lambda-list-parsing-error :item head))
+ ))
+
+ (parse-optional-arguments (lambda-list &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (error 'lambda-list-parsing-error :item head))
+ (&key (parse-keyword-arguments (rest lambda-list)))
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))
+ (&rest (parse-rest-arguments (rest lambda-list)))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((funcall optional-variable-test head)
+ (push head optionals)
+ (parse-optional-arguments (rest lambda-list)))
+ (t (error 'lambda-list-parsing-error :item head))
+ ))
+
+ (parse-keyword-arguments (lambda-list &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (error 'lambda-list-parsing-error :item head))
+ (&key (error 'lambda-list-parsing-error :item head))
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))
+ (&rest (parse-rest-arguments (rest lambda-list)))
+ (&allow-other-keys
+ (unless (or (null (rest lambda-list))
+ (eql (cadr lambda-list) '&aux))
+ (error 'lambda-list-parsing-error :item head))
+ (skip-until-next-lambda-list-keyword (rest lambda-list)))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((funcall key-variable-test head)
+ (push head keywords)
+ (parse-keyword-arguments (rest lambda-list)))
+ (t (error 'lambda-list-parsing-error :item head))
+ ))
+
+ (parse-rest-arguments (lambda-list &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((consp head)
+ (push head rest)
+ ;; Error checking here.
+ (parse-rest-arguments (rest lambda-list)))
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (error 'lambda-list-parsing-error :item head))
+ (&key (parse-keyword-arguments (rest lambda-list)))
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))
+ (&rest (error 'lambda-list-parsing-error :item head))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((funcall rest-variable-test head)
+ (push head rest)
+ (parse-rest-arguments (rest lambda-list)))
+ (t (error 'lambda-list-parsing-error :item head))
+ ))
+
+ (parse-auxiliary-arguments (lambda-list &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (error 'lambda-list-parsing-error :item head))
+ (&key (error 'lambda-list-parsing-error :item head))
+ (&aux (error 'lambda-list-parsing-error :item head))
+ (&rest (error 'lambda-list-parsing-error :item head))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((funcall aux-variable-test head)
+ (push head auxiliary)
+ (parse-auxiliary-arguments (rest lambda-list)))
+ (t (error 'lambda-list-parsing-error :item head))
+ ))
+
+ (skip-until-next-lambda-list-keyword (lambda-list
+ &aux (head (first lambda-list)))
+ (cond ((null lambda-list) nil)
+ ((and (symbolp head)
+ (member head lambda-list-keywords))
+ (case head
+ (&optional (parse-optional-arguments (rest lambda-list)))
+ (&key (parse-keyword-arguments (rest lambda-list)))
+ (&aux (parse-auxiliary-arguments (rest lambda-list)))
+ (&rest (parse-rest-arguments (rest lambda-list)))
+ (otherwise
+ (warn "Keyword ~A is implementation dependent.~@
+ The parsing may not work properly."
+ head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list))
+ ))
+ )
+ ((symbol-or-cons-p head)
+ (skip-until-next-lambda-list-keyword (rest lambda-list)))
+ ))
+ )
+ (parse-named-arguments lambda-list)
+ (values (nreverse vars)
+ (nreverse optionals)
+ (nreverse keywords)
+ (nreverse rest)
+ (nreverse auxiliary))
+ )))
+
+
+(defun parse-var-type-info (var)
+ (etypecase var
+ (symbol (make-lambda-var-info :name var))
+ (cons (make-lambda-var-info :name (first var) :type (second var)))))
+
+
+(defun parse-optional-var-type-info (var)
+ (etypecase var
+ (symbol (make-optional-lambda-var-info :name var))
+ (cons (etypecase (first var)
+ (symbol (if (second var) ; special case (foo nil) and (foo)
+ (make-optional-lambda-var-info
+ :name (first var)
+ :type (or (and (constantp (second var)) (type-of (second var)))
+ t))
+ (make-optional-lambda-var-info :name (first var))))
+ (cons (make-optional-lambda-var-info
+ :name (caar var)
+ :type (cadar var)
+ :default-value (cadr var)))
+ ))
+ ))
+
+
+(defun parse-auxiliary-var-type-info (var)
+ (parse-optional-var-type-info var))
+
+(defun parse-rest-var-type-info (var) ; See the FUNCTION type ANSI spec for an explanation.
+ (etypecase var
+ (symbol (make-rest-lambda-var-info :name var))
+ (cons (make-rest-lambda-var-info :name (first var) :element-type (second var)))))
+
+
+(defun parse-key-var-type-info (var)
+ (etypecase var
+ (symbol (make-key-lambda-var-info :name var))
+ (cons (destructuring-bind (var &optional (init-value nil init-value-supplied-p))
+ var
+ (let ((init-value-type
+ (if init-value-supplied-p
+ (or (and (constantp init-value) (type-of init-value))
+ t)
+ t))
+ )
+ (etypecase var
+ (symbol (make-key-lambda-var-info :name var
+ :type init-value-type
+ :default-value init-value))
+
+ (cons (destructuring-bind (kwd var)
+ var
+ (etypecase var
+ (symbol
+ (make-key-lambda-var-info :name var
+ :default-value init-value
+ :type init-value-type
+ :keyword-name kwd))
+ (cons
+ (make-key-lambda-var-info :name (first var)
+ :default-value init-value
+ :type (second var)
+ :keyword-name kwd))))
+ ))
+ )))
+ ))
+
+
+;;; end of file -- lambda-list-parsing.lisp --
diff -rN -u old-cl-unification-1/lib-dependent/cl-ppcre-template.asd new-cl-unification-1/lib-dependent/cl-ppcre-template.asd
--- old-cl-unification-1/lib-dependent/cl-ppcre-template.asd 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/lib-dependent/cl-ppcre-template.asd 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,11 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.asd --
+;;;; ASDF system file.
+
+(asdf:defsystem cl-ppcre-template
+ :author "Marco Antoniotti"
+ :components ((:file "cl-ppcre-template"))
+ :depends-on (cl-ppcre cl-unification))
+
+;;;; end of file -- cl-ppcre-template.asd --
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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/lib-dependent/cl-ppcre-template.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,149 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.lisp --
+;;;; REGEXP template dependent on CL-PPCRE.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+
+;;;; REGEXP Templates.
+;;;; Another extension of the type specifier language.
+
+;;;; A template can also be
+;;;;
+;;;; <template> ::= #| templates from template-hierarchy.lisp |#
+;;;; | <regexp template>
+;;;;
+;;;; Hairier REGEXP template spec syntax:
+;;;;
+;;;; (regexp|regular-expression) <REGEXP> &optional <unification vars> &rest <keys>
+;;;;
+;;;; where
+;;;;
+;;;; <REGEXP> ::= <a CL-PPCRE regexp string or tree>
+;;;; <unification vars> ::= '(' <variable>* ')'
+;;;; <keys> ::= <CL-PPCRE (constant) keys to be passed to CL-PPCRE:CREATE-SCANNER>
+
+(defclass regular-expression-template (string-template)
+ ((scanner :reader scanner)
+ (regexp :reader regular-expression)
+ (vars :reader variables
+ :reader registers
+ :type list)
+ )
+ (:documentation "The Regular Expression Template.
+
+A template for matching strings using regular expressions.
+The actual matching is done thankes to the CL-PPCRE library.")
+ )
+
+
+
+(defgeneric regular-expression-template-p (x)
+ (:method ((x regular-expression-template)) t)
+ (:method ((x t)) nil))
+
+
+(defmethod make-template ((kind (eql 'regexp)) (spec cons))
+ (make-instance 'regular-expression-template :spec spec))
+
+(defmethod make-template ((kind (eql 'regular-expression)) (spec cons))
+ (make-template 'regexp spec))
+
+
+(defmethod initialize-instance :after ((re-t regular-expression-template) &key)
+ (destructuring-bind (re-kwd regexp &optional vars &rest keys)
+ (template-spec re-t)
+ (declare (ignore re-kwd))
+ (multiple-value-bind (scanner reg-names)
+ (let ((cl-ppcre:*allow-named-registers* t))
+ (apply #'cl-ppcre:create-scanner regexp keys))
+ (declare (ignorable reg-names))
+ (setf (slot-value re-t 'scanner)
+ scanner
+
+ (slot-value re-t 'regexp)
+ regexp
+
+ (slot-value re-t 'vars)
+ vars ; Maybe will merge with REG-NAMES...
+ )
+ )))
+
+#|
+(defmethod initialize-instance :after ((re-t regular-expression-template) &key)
+ ;; FIX: handling of CL-PPCRE:CREATE-SCANNER keywords. This can be
+ ;; done by using the "harier" syntax of SPEC (see above).
+ (destructuring-bind (re-kwd regexp &optional vars &rest keys)
+ (template-spec re-t)
+ (declare (ignore re-kwd)
+ (ignorable regexp vars keys))
+ (multiple-value-bind (scanner reg-names)
+ (let ((cl-ppcre:*allow-named-registers* t))
+ (cl-ppcre:create-scanner (second (template-spec re-t))))
+ (declare (ignorable reg-names))
+ (setf (slot-value re-t 'scanner)
+ scanner
+
+ (slot-value re-t 'regexp)
+ (second (template-spec re-t)) ; For the time being just stored and
+ ; used for debugging.
+ )
+ )))
+|#
+
+;;;;---------------------------------------------------------------------------
+;;;; Implementation.
+
+;;; Unification.
+
+(defmethod unify ((ret1 regular-expression-template)
+ (ret2 regular-expression-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (if (eq ret1 ret2)
+ env
+ ;; I could UNIFY the result of the CL-PPCRE:PARSE-STRINGs.
+ (error 'unification-failure
+ :format-control "Do not know how unify the two ~
+ regular-expression templates: ~S and ~S."
+ :format-arguments (list ret1 ret2))))
+
+
+(defmethod unify ((re-t regular-expression-template) (s string)
+ &optional (env (make-empty-environment))
+ &key
+ (start 0)
+ end
+ &allow-other-keys)
+ (declare (type (integer 0 #.most-positive-fixnum) start)
+ (type (or null (integer 0 #.most-positive-fixnum)) end))
+ (let ((end (or end (length s))))
+ (declare (type (integer 0 #.most-positive-fixnum) end))
+
+ (multiple-value-bind (matched-p strings)
+ (cl-ppcre:scan-to-strings (scanner re-t) s :start start :end end)
+ (unless matched-p
+ (error 'unification-failure
+ :format-control "String ~S cannot be matched against ~
+ regular expression ~S."
+ :format-arguments (list s
+ (regular-expression re-t))))
+ (let ((vars (variables re-t)))
+ (if (null vars)
+ env
+ (loop for r-string of-type string across strings
+ for v in vars
+ for result-env = (var-unify v r-string env)
+ then (var-unify v r-string result-env)
+ finally (return result-env))))
+ )))
+
+
+(defmethod unify ((s string) (re-t regular-expression-template)
+ &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/cl-ppcre-template.system new-cl-unification-1/lib-dependent/cl-ppcre-template.system
--- old-cl-unification-1/lib-dependent/cl-ppcre-template.system 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/lib-dependent/cl-ppcre-template.system 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,12 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; cl-ppcre-template.system --
+;;;; MK system file.
+
+(mk:defsystem "CL-PPCRE-TEMPLATE"
+ :author "Marco Antoniotti"
+ :non-required-p t
+ :components ((:file "cl-ppcre-template"))
+ :depends-on ("CL-PPCRE"))
+
+;;;; end of file -- cl-ppcre-template.system --
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-04 18:11:12.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 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/match-block.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,350 @@
+;;;; -*- 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")
+
+(defun clean-unify-var-name (v)
+ (assert (variablep v))
+ (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: { ((<template> <object>) &body) }+ default-clause
+ 'case: { (<template> &body) }+ default-clause
+ 'nil: { (<template> <object> &body) }+ default-clause
+ default-clause: [ (t &body) ]
+
+clauses is a list of forms conforming to the syntax just described.
+
+default is a single form to be executed if no other forms match.
+named is the name for a surrounding block.
+
+environment is a base environment object which template matches should extend.
+The new environments created will share frames with this environment, though any
+additional bindings will be in a new, unshared frame. environment defaults to
+'(make-empty-environment).
+
+errorp is a single form which will be evaluated to determine if error-form is
+executed.
+
+error-form is a form which is expected to generate an error (e.g., `(error
+'unification-non-exhaustive)). It defaults to providing the error returned by
+the last form which failed unification.
+
+keyform should be used only for a clause-munger of 'case. It provides the form
+to evaluate to produce the object for unification in -case macros.
+
+*Interaction between default-clause, :errorp + :error-form, and :default
+
+This function produces a giant COND form which ends one or more of these
+assorted \"default\" clauses. They are produced in a very specific order:
+1. errorp + error-form are tried first. Thus, if errorp is 't, neither the
+ default-clause in clauses will be reached, nor the :default clause. This is
+ essentially a hook to produce a pre-user default clause. (e.g., for
+ MATCH's :errorp)
+2. The default-clause in clauses, if it exists, will be tried next. Because
+ clauses is expected to contain user-specified clauses, this is expected to be
+ the user-specified default clause.
+3. Finally, the :default clause, if specified, will be tried. This is
+ essentially a hook to produce a post-user default clause. (e.g., for
+ -ECASE's error form)
+"
+ (flet ((default-clause-p (clause) (member (first clause) '(t otherwise))))
+ (let ((match-environment (gensym "MATCH-ENV-"))
+ (base-environment (gensym "BASE-ENV-"))
+ (match-error (gensym "MATCH-ERR-"))
+ (case-keyform (gensym "KEYFORM-"))
+ (match-clauses (remove-if #'default-clause-p clauses))
+ (default-clauses (remove-if-not #'default-clause-p clauses)))
+ (when (or (and (< 1 (length default-clauses))
+ ;; whether the default clause is the last one
+ (every #'eq clauses (append match-clauses default-clauses)))
+ ;; :keyform only applies for 'case
+ (and keyform (not (eq clause-munger 'case))))
+ (error 'program-error))
+ (labels ((ensure-template (template)
+ (cond (;; Logical variables are special-cased.
+ (variablep template) `',template)
+ ;; Same for lists (under matchf)
+ ((and (eq 'matchf template-munger)
+ (listp template))
+ (make-instance 'list-template
+ :spec (cons 'list template)))
+ (t template)))
+ (expand-clause (clause)
+ (destructuring-bind (template object &rest body)
+ (munge-clause clause)
+ (let* ((template (ensure-template template))
+ (variables (collect-template-vars template)))
+ `((setf (values ,match-environment ,match-error)
+ (unify* ,template ,object (make-expanded-environment ,base-environment)))
+ (with-unification-variables ,variables ,match-environment
+ ,@body)))))
+ (munge-clause (clause)
+ (ecase clause-munger
+ (cond (destructuring-bind (head . tail) clause
+ (if (consp head)
+ (list* (car head) (cadr head) tail)
+ clause)))
+ (case (list* (car clause) case-keyform (cdr clause)))
+ ((nil) clause))))
+ `(block ,named
+ (let ((,match-environment nil)
+ (,match-error nil)
+ (,case-keyform ,keyform)
+ (,base-environment ,(if environment
+ `(make-shared-environment ,environment)
+ '(make-empty-environment))))
+ (declare (dynamic-extent ,match-environment ,base-environment)
+ (ignorable ,case-keyform))
+ (cond
+ ,@(mapcar #'expand-clause match-clauses)
+ ,@(when errorp `((,errorp ,(or error-form `(error ,match-error)))))
+ ,@(when default-clauses `((t ,@(cdar default-clauses))))
+ ,@(when default `((t ,default))))))))))
+
+(defmacro %set-documentation ((&rest symbols) docstring)
+ `(eval-when (:load-toplevel :execute)
+ (mapcar (lambda (fn) (setf (documentation fn 'function) ,docstring))
+ ',symbols)))
+
+(defmacro match ((template object
+ &key
+ (named nil)
+ (match-named nil match-named-p)
+ (substitution nil)
+ (errorp t)
+ (error-value nil))
+ &body forms)
+ (when match-named-p
+ (warn ":match-named is deprecated. Use :named instead."))
+ (%match-expander 'match
+ 'nil
+ `((,template ,object ,@forms))
+ :default error-value
+ :named (or named match-named)
+ :environment substitution
+ :errorp errorp))
+
+(defmacro matchf ((template object
+ &key
+ (named nil)
+ (match-named nil match-named-p)
+ (substitution nil)
+ (errorp t)
+ (error-value nil))
+ &body forms)
+ (when match-named-p
+ (warn ":match-named is deprecated. Use :named instead."))
+ (%match-expander 'matchf
+ 'nil
+ `((,template ,object ,@forms))
+ :default error-value
+ :named (or named match-named)
+ :environment substitution
+ :errorp errorp))
+
+(%set-documentation
+ (match matchf)
+ "Sets up a lexical environment to evaluate FORMS after an unification.
+
+MATCH and MATCHF unify a TEMPLATE and an OBJECT and then set up a lexical
+environment where the variables present in the template are bound
+lexically. Note that both variable names '?FOO' and 'FOO' are bound
+for convenience.
+
+MATCHF does not 'evaluate' TEMPLATE (note that using the #T syntax will
+generate a template at read-time).
+
+MATCH and MATCHF forms return the values returned by the evaluation of the
+last of the FORMS.
+
+If ERRORP is non-NIL (the default) then the form raises a
+UNIFICATION-FAILURE, otherwise the result of evaluating ERROR-VALUE,
+whose default is NIL is returned. (Note that UNIFICATION-FAILUREs
+raising from the evaluation of FORMS will /not/ be caught and handled
+according to ERRORP settings.)
+
+A surrounding BLOCK named NAMED is set up around the matching code.")
+
+
+
+(define-condition unification-non-exhaustive (unification-failure)
+ ()
+ (:default-initargs
+ :format-control "Non exhaustive matching."))
+
+
+(defmacro match-cond (&body clauses)
+ (%match-expander 'match 'cond clauses))
+
+(defmacro matchf-cond (&body clauses)
+ (%match-expander 'matchf 'cond clauses))
+
+(defmacro matching ((&key errorp
+ default-substitution
+ (named nil)
+ (matching-named nil matching-named-p))
+ &body match-clauses)
+ (when matching-named-p
+ (warn ":matching-named is deprecated. Use :named instead."))
+ (%match-expander 'match 'cond match-clauses
+ :errorp errorp
+ :error-form `(error 'unification-non-exhaustive)
+ :named (or named matching-named)
+ :environment default-substitution))
+
+(%set-documentation
+ (match-cond matchf-cond matching)
+ "MATCH-COND, MATCHF-COND, and MATCHING set up a COND-like environment for
+multiple template matching clauses.
+
+Their syntax comprises a number of clauses of the form
+ <clause> ::= <regular-clause> | <default-clause>
+ <regular-clause> ::= ((<template> <form>) &body <forms>)
+ <default-clause> ::= (t &body <forms>)
+ | (otherwise &body <forms>)
+<form> and <forms> are regular Common Lisp forms.
+<template> is a unification template.
+
+The full syntax is
+ match-cond <clauses>
+ matchf-cond <clauses>
+ matching (&key errorp default-substitution named) <clauses>
+
+Each clause evaluates its forms in an environment where the variables
+present in the template are bound lexically. Note that both variable
+names '?FOO' and 'FOO' are bound for convenience.
+
+The values returned by the macros are those of the last form in
+the first clause that satisfies the match test.
+
+If ERRORP is non-NIL then if none of the regular clauses matches, then
+an error of type UNIFICATION-NON-EXAUSTIVE is signalled, regardless of
+any default clause. Otherwise, the default clause behaves as a
+standard COND default clause. The default value of ERRORP is NIL.
+")
+
+
+(defmacro match-case ((object &key errorp default-substitution named (match-case-named nil match-case-named-p))
+ &body clauses)
+ (when match-case-named-p
+ (warn ":match-case-named is deprecated. Use :named instead."))
+ (%match-expander 'match 'case clauses
+ :named (or named match-case-named)
+ :environment default-substitution
+ :errorp errorp
+ :error-form `(error 'unification-non-exhaustive)
+ :keyform object))
+
+(defmacro match-ecase ((object &key default-substitution named)
+ &body clauses)
+ (%match-expander 'match 'case clauses
+ :named named
+ :environment default-substitution
+ :default `(error 'unification-non-exhaustive)
+ :keyform object))
+
+(defmacro matchf-case ((object &key errorp default-substitution named (match-case-named nil match-case-named-p))
+ &body clauses)
+ (when match-case-named-p
+ (warn ":match-case-named is deprecated. Use :named instead."))
+ (%match-expander 'matchf 'case clauses
+ :named (or named match-case-named)
+ :environment default-substitution
+ :errorp errorp
+ :error-form `(error 'unification-non-exhaustive)
+ :keyform object))
+
+(defmacro matchf-ecase ((object &key default-substitution named)
+ &body clauses)
+ (%match-expander 'matchf 'case clauses
+ :named named
+ :environment default-substitution
+ :default `(error 'unification-non-exhaustive)
+ :keyform object))
+
+(%set-documentation
+ (match-case match-ecase matchf-case matchf-ecase)
+ "MATCH-CASE, MATCH-ECASE, MATCHF-CASE, and MATCHF-ECASE set up a CASE-like
+environment for multiple template matching clauses.
+
+Their syntax comprises a number of clauses of the form
+ <clause> ::= <regular-clause> | <default-clause>
+ <regular-clause> ::= (<template> &body <forms>)
+ <default-clause> ::= (t &body <forms>)
+ | (otherwise &body <forms>)
+<form> and <forms> are regular Common Lisp forms.
+<template> is a unification template.
+
+The full syntax is
+ match-case (<object> &key default-substitution named errorp) <clauses>
+ match-ecase (<object> &key default-substitution named) <clauses>
+ matchf-case (<object> &key default-substitution named errorp) <clauses>
+ matchf-ecase (<object> &key default-substitution named) <clauses>
+
+Each clause evaluates its forms in an environment where the variables
+present in the template are bound lexically. Note that both variable
+names '?FOO' and 'FOO' are bound for convenience.
+
+The values returned by the macros are those of the last form in
+the first clause that satisfies the match test.
+
+MATCHF-ECASE and MATCHF-CASE behave like MATCH-ECASE and MATCH-CASE, but the
+patterns are not evaluated (i.e., they rely on MATCHF instead of MATCH to
+construct the macro expansion).
+")
+
+
+;;;;---------------------------------------------------------------------------
+;;;; Testing.
+
+#| Tests
+
+(let ((n 42))
+ (matching ()
+ ((0 n) 1)
+ ((?x n) (* x (1- x)))))
+
+
+(let ((n 42))
+ (match-case (n)
+ (0 1)
+ (?x (* x (1- x)))))
+
+
+(let ((n 42))
+ (match-case (n)
+ (0 1)
+ (otherwise (* n (1- n)))))
+
+(defun fatt (x)
+ (match-case (x :errorp t)
+ (0 1)
+ (#T(number ?n) (* ?n (fatt (1- n))))
+ ))
+
+|#
+
+;;;; end of file -- math-blocks.lisp --
diff -rN -u old-cl-unification-1/substitutions.lisp new-cl-unification-1/substitutions.lisp
--- old-cl-unification-1/substitutions.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/substitutions.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,226 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; substitutions.lisp --
+;;;; General CL structures unifier.
+;;;; Substitution definitions. Mostly a rehash of the usual SICP stuff.
+
+;;;; See file COPYING for copyright licensing information.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;;---------------------------------------------------------------------------
+;;; Bindings.
+
+(deftype binding () 'cons)
+
+(deftype bindings () 'list) ; An A-LIST.
+
+(defun make-binding (variable value)
+ (cons variable value))
+
+(defun extend-bindings (variable value bindings)
+ (acons variable value bindings))
+
+
+(defun binding-variable (b)
+ (declare (type binding b))
+ (car b))
+
+(defun (setf binding-variable) (v b)
+ (declare (type binding b))
+ (setf (car b) v))
+
+
+(defun binding-value (b)
+ (declare (type binding b))
+ (cdr b))
+
+
+(defun (setf binding-value) (v b)
+ (declare (type binding b))
+ (setf (cdr b) v))
+
+
+(defun bindings-values (bindings) (mapcar #'cdr bindings))
+
+(defun bindings-keys (bindings) (mapcar #'car bindings))
+
+
+
+(define-condition unification-variable-unbound (unbound-variable)
+ ()
+ )
+
+(define-condition unification-failure (simple-error)
+ ())
+
+
+;;;---------------------------------------------------------------------------
+;;; Frames.
+
+(defstruct (frame (:constructor make-frame (&optional bindings)))
+ (bindings () :type bindings))
+
+(defun empty-frame-p (f)
+ (declare (type frame f))
+ (null (frame-bindings f)))
+
+
+(defun find-variable-binding-in-frame (v f)
+ (declare (type frame f))
+ (assoc v (frame-bindings f)))
+
+
+(defun find-variable-value-in-frame (v f)
+ (declare (type frame f))
+ (let ((b (find-variable-binding-in-frame v f)))
+ (declare (type (or null binding) b))
+ (if b
+ (values (cdr b) t)
+ (values nil nil))))
+
+(defun frame-variables (frame)
+ (mapcar 'binding-variable (frame-bindings frame)))
+
+
+(defun frame-values (frame)
+ (mapcar 'binding-value (frame-bindings frame)))
+
+
+;;;---------------------------------------------------------------------------
+;;; Environments.
+
+(defstruct (environment (:print-object print-environment)
+ (:copier nil))
+ (frames () :type list))
+
+(defun print-environment (env stream)
+ (if *print-readably*
+ (format stream "#S(ENVIRONMENT FRAMES ~S)"
+ (environment-frames env))
+ (print-unreadable-object (env stream :type nil :identity t)
+ (format stream "~:[~;EMPTY ~]UNIFY ENVIRONMENT: ~D frame~:P"
+ (empty-environment-p env)
+ (list-length (environment-frames env))))))
+
+(deftype substitution () 'environment)
+
+(defun substitution-p (x) (environment-p x))
+
+(defun first-frame (env)
+ (first (environment-frames env)))
+
+
+(defun make-empty-environment ()
+ (make-environment :frames (list (make-frame))))
+
+(defun copy-environment (env)
+ (declare (type environment env))
+ (make-environment :frames (copy-list (environment-frames env))))
+
+(defun make-shared-environment (env &optional (pushp nil))
+ (declare (type environment env))
+ (make-environment :frames (if pushp
+ (cons (make-frame) (environment-frames env))
+ (environment-frames env))))
+
+(defun push-frame (env)
+ (declare (type environment env))
+ (push (make-frame) (environment-frames env)))
+
+(defun pop-frame (env)
+ (declare (type environment env))
+ (pop (environment-frames env)))
+
+
+(defun make-expanded-environment (base-env)
+ (make-environment :frames (cons (make-frame) (environment-frames base-env))))
+
+(defun empty-environment-p (env)
+ (declare (type environment env))
+ (let ((env-frames (environment-frames env)))
+ (declare (type list env-frames))
+ (and (= 1 (list-length env-frames))
+ (empty-frame-p (first env-frames)))))
+
+(defparameter *null-environment* (make-empty-environment))
+
+
+(defun find-variable-value (variable &optional (env *null-environment*) errorp)
+ (declare (type environment env))
+ (labels ((find-var-value (frames)
+ (cond (frames
+ (multiple-value-bind (val foundp)
+ (find-variable-value-in-frame variable (first frames))
+ (if foundp
+ (values val t)
+ (find-var-value (rest frames)))))
+ (errorp
+ (error 'unification-variable-unbound :variable variable))
+ (t (values nil nil))))
+ )
+ (find-var-value (environment-frames env))))
+
+
+
+(defun extend-environment (var pat &optional (env (make-empty-environment)))
+ (let ((first-frame (first-frame env)))
+ (setf (frame-bindings first-frame)
+ (extend-bindings var pat (frame-bindings first-frame)))
+ env))
+
+
+(defun fill-environment (vars pats &optional (env (make-empty-environment)))
+ (map nil (lambda (v p) (extend-environment v p env)) vars pats)
+ env)
+
+
+(defun fill-environment* (vars-pats &optional (env (make-empty-environment)))
+ (loop for (v . p) in vars-pats do (extend-environment v p env))
+ env)
+
+
+(declaim (inline v?))
+(declaim (ftype (function (symbol &optional environment boolean)
+ (values t boolean))
+ find-variable-value)
+ (ftype (function (symbol environment &optional boolean)
+ (values t boolean))
+ v?))
+
+(defun v? (s env &optional (plain-symbol-p nil))
+ (find-variable-value (if plain-symbol-p
+ (make-var-name s)
+ s)
+ env))
+
+
+(defun environment-variables (env)
+ (mapcan #'frame-variables (environment-frames env)))
+
+(defun environment-values (env)
+ (mapcan #'frame-values (environment-frames env)))
+
+
+;;;---------------------------------------------------------------------------
+;;; Simple debugging.
+
+(defun dump-frame (f &optional (out *standard-output*))
+ (declare (type frame f))
+ (loop for (var . value) in (frame-bindings f)
+ do (format out "~&~A~VT= ~A~%" var 8 value))
+ )
+
+(defun dump-environment (env &optional (out *standard-output*))
+ (declare (type environment env))
+ (if (empty-environment-p env)
+ (format out ">>> Empty unify environment ~S.~%" env)
+ (loop initially (format out ">>> Dumping unify environment ~S.~%" env)
+ for fr in (environment-frames env)
+ for fr-n downfrom (list-length (environment-frames env))
+ do (format out ">>> Frame ~D:~%" fr-n)
+ do (dump-frame fr out)
+ do (terpri out)
+ )))
+
+;;;; end of file -- substitutions.lisp --
diff -rN -u old-cl-unification-1/template-reader.lisp new-cl-unification-1/template-reader.lisp
--- old-cl-unification-1/template-reader.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/template-reader.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,67 @@
+;;; Setting up the reader macro.
+(in-package "CL.EXT.DACF.UNIFICATION")
+
+;;; 20080711 MA:
+;;; Reverted to the old version with MAKE-LOAD-FORM added. Template
+;;; objects are created at read-time.
+
+(defun |sharp-T-reader| (stream subchar arg)
+ (declare (ignore subchar arg))
+ (let ((spec (read stream t nil t)))
+ (typecase spec
+ (null (make-template nil spec))
+ (cons (make-template (first spec) spec))
+ (t (make-template spec spec)))))
+
+(defmethod make-load-form ((x template) &optional env)
+ (make-load-form-saving-slots x :environment env))
+
+
+#||
+;;; Version with more 'macro-like' behavior. The previous version
+;;; created an object at read-time, which may cause problems with
+;;; MAKE-LOAD-FORMs, constant-ness etc etc.
+;;;
+;;; 20080713 MA
+;;; Removed because it was not working well with nested templates.
+;;; Reverted to the original one plus MAKE-LOAD-FORM.
+
+(defun |sharp-T-reader| (stream subchar arg)
+ (declare (ignore subchar arg))
+ (let ((spec (read stream t nil t)))
+ (typecase spec
+ (null `(make-template nil ',spec))
+ (cons `(make-template ',(first spec) ',spec))
+ (t `(make-template ',spec ',spec)))
+ ))
+||#
+
+(eval-when (:load-toplevel :execute)
+ (set-dispatch-macro-character #\# #\T '|sharp-T-reader|))
+
+
+#|| Useless with the read time templates and MAKE-LOAD-FORM.
+
+(defun rewrite-template-spec (spec)
+ "Rewrites a template specification.
+The rewriting simply makes sure that sub-templates are created as needed.
+The result is either the SPEC itself or an appropriate call to LIST."
+
+ (typecase spec
+ (atom `',spec)
+ (cons (destructuring-bind (head &rest tail)
+ spec
+ (case head
+ (quote spec)
+ (make-template `(make-template ,(first tail)
+ ,(rewrite-template-spec (second (second tail)))))
+ (t `(list ',head ,@(mapcar #'rewrite-template-spec tail)))
+ )))
+ (t `',spec)))
+
+||#
+
+(defmacro enable-template-reader ()
+ `(eval-when (:compile-toplevel :load-toplevel :execute)
+ (setf *readtable* (copy-readtable *readtable*))
+ (set-dispatch-macro-character #\# #\T '|sharp-T-reader|)))
diff -rN -u old-cl-unification-1/templates-hierarchy.lisp new-cl-unification-1/templates-hierarchy.lisp
--- old-cl-unification-1/templates-hierarchy.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/templates-hierarchy.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,555 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; templates-hierarchy.lisp --
+
+;;;; See file COPYING for copyright licensing information.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+;;; Templates.
+;;; Essentially we extend the type specifier language.
+;;; The interesting thing is that we need to specify how a "match"
+;;; between a template and a CL object is performed.
+
+;;; A template is one of the following
+;;;
+;;; <template> ::= <logical variable>
+;;; | <structure template>
+;;; | <instance template>
+;;; | <destructuring template>
+;;; | <vector template>
+;;; | <sequence template>
+;;; | <array template>
+;;; | <type template>
+;;; | <lisp object>
+;;;
+
+;;; Destructuring Template Lambda List (as per standard CL terminology)
+;;;
+;;; <destructuring template lambda list> ::= <a "destructuring LL" with <template> in lieu of <var>>
+
+;;; Templates for Structures and Instances
+;;;
+;;; <structure template> ::= (<class designator> <structure-slot-spec>*)
+;;;
+;;; <instance template> ::= (<class designator> <slot-spec>*)
+;;;
+;;; where
+;;;
+;;; <structure-slot-spec> ::= <reader-name> <template>
+;;; <instance-slot-spec> ::= <accessor-name> <template>
+;;; | (slot-value <slot-name>) <template>
+
+;;; Template for Sequences
+;;;
+;;; <sequence template> ::= (<container type> . <destructuring template lambda list>)
+;;; | (subseq <from> <to> . <destructuring template lambda list>)
+;;; <container type> ::= list | cons | vector | array
+
+;;; Templates for Vectors and Arrays.
+;;;
+;;; <vector template> ::= (vector . <destructuring template lambda list>)
+;;;
+;;; <array template> ::= (array <shape template>)
+;;; | (<array CL type specifier> <shape template>)
+;;; | (array (['*' | <element type>] [<dimension spec>]]) <shape template>)
+;;; | (aref <index template> <template>)
+;;; <shape template> ::= <destructuring template lambda list>
+;;; | <sequence template>
+;;; | (<shape template>)
+
+;;; Templates for LIST and CONS
+;;; <list template> ::= (list . <destructuring template lambda list>)
+;;; <cons template> ::= (cons <template> <template>)
+
+;;; A regular list or cons acts as a list (hence as a sequence) template, or a cons template.
+
+(define-condition unification-template-error (simple-error)
+ ())
+
+;;; Templates are introduced by the reader macro #T(...)
+
+(defclass template ()
+ ((spec :accessor template-spec :type (or symbol cons) :initarg :spec))
+ (:default-initargs :spec nil))
+
+(defgeneric template-p (x)
+ (:method ((x template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass type-template (template) ())
+
+(defgeneric type-template-p (x)
+ (:method ((x type-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric type-template-type-spec (x)
+ (:method ((x type-template))
+ (let ((spec (template-spec x)))
+ (if spec
+ (first spec)
+ 'null))))
+
+
+
+(defclass nil-template (type-template) ()) ; This is the point where we break the type hierarchy.
+
+(defgeneric nil-template-p (x)
+ (:method ((x nil-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass expression-template (template) ())
+
+(defgeneric expression-template-p (x)
+ (:method ((x expression-template)) t)
+ (:method ((x t)) nil))
+
+
+(defmethod print-object ((template template) stream)
+ (format stream "#T~S" (template-spec template)))
+
+
+(defclass sequence-template (type-template) ())
+
+(defgeneric sequence-template-p (x)
+ (:method ((x sequence-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass list-template (sequence-template) ())
+
+(defgeneric list-template-p (x)
+ (:method ((x list-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass lambda-template (list-template expression-template) ())
+
+(defgeneric lambda-template-p (x)
+ (:method ((x lambda-template)) t)
+ (:method ((x t)) nil))
+
+
+
+(defclass array-template (type-template) ())
+
+(defgeneric array-template-p (x)
+ (:method ((x array-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass vector-template (sequence-template array-template) ())
+
+(defgeneric vector-template-p (x)
+ (:method ((x vector-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass string-template (vector-template) ())
+
+(defgeneric string-template-p (x)
+ (:method ((x string-template)) t)
+ (:method ((x t)) nil))
+
+
+
+
+(defclass symbol-template (type-template) ())
+
+(defgeneric symbol-template-p (x)
+ (:method ((x symbol-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass number-template (type-template) ())
+
+(defgeneric number-template-p (x)
+ (:method ((x number-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass structure-object-template (type-template) ())
+
+(defgeneric structure-object-template-p (x)
+ (:method ((x structure-object-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass standard-object-template (type-template) ())
+
+(defgeneric standard-object-template-p (x)
+ (:method ((x standard-object-template)) t)
+ (:method ((x t)) nil))
+
+
+;;; Expression Templates.
+
+(defclass subseq-template (expression-template) ())
+
+(defgeneric subseq-template-p (x)
+ (:method ((x subseq-template)) t)
+ (:method ((x t)) nil))
+
+
+
+(defclass element-template (expression-template) ())
+
+(defgeneric element-template-p (x)
+ (:method ((x element-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass elt-template (element-template) ())
+
+(defgeneric elt-template-p (x)
+ (:method ((x elt-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass aref-template (element-template) ())
+
+(defgeneric aref-template-p (x)
+ (:method ((x aref-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nth-template (element-template) ())
+
+(defgeneric nth-template-p (x)
+ (:method ((x nth-template)) t)
+ (:method ((x t)) nil))
+
+
+(defclass nthcdr-template (element-template) ())
+
+(defgeneric nthcdr-template-p (x)
+ (:method ((x nthcdr-template)) t)
+ (:method ((x t)) nil))
+
+
+(defgeneric make-template (kind spec))
+
+
+(defmethod make-template ((kind null) (spec symbol))
+ (assert (null spec) (spec) "MAKE-TEMPLATE called erroneously with ~S and ~S." kind spec)
+ (make-instance 'nil-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec symbol))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind (eql 'symbol)) (spec cons))
+ (make-instance 'symbol-template :spec spec))
+
+(defmethod make-template ((kind symbol) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'structure-object)
+ (make-instance 'structure-object-template :spec spec))
+ ((subtypep kind 'standard-object)
+ (make-instance 'standard-object-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind cons) (spec cons))
+ (cond ((subtypep kind 'number)
+ (make-instance 'number-template :spec spec))
+ ((subtypep kind 'string)
+ (make-instance 'string-template :spec spec))
+ ((subtypep kind 'vector)
+ (make-instance 'vector-template :spec spec))
+ ((subtypep kind 'array)
+ (make-instance 'array-template :spec spec))
+ (t
+ (error 'unification-template-error
+ :format-control "Unknown template specifier ~S."
+ :format-arguments (list kind)))
+ ))
+
+(defmethod make-template ((kind number) (spec number))
+ (assert (= kind spec))
+ (make-instance 'number-template :spec spec))
+
+(defmethod make-template ((kind (eql 'sequence)) (spec cons))
+ (make-instance 'sequence-template :spec spec))
+
+(defmethod make-template ((kind (eql 'list)) (spec cons))
+ (make-instance 'list-template :spec spec))
+
+(defmethod make-template ((kind (eql 'lambda)) (spec cons))
+ (make-instance 'lambda-template :spec spec))
+
+(defmethod make-template ((kind (eql 'vector)) (spec cons))
+ (make-instance 'vector-template :spec spec))
+
+(defmethod make-template ((kind (eql 'string)) (spec cons))
+ (make-instance 'string-template :spec spec))
+
+(defmethod make-template ((kind (eql 'array)) (spec cons))
+ (make-instance 'array-template :spec spec))
+
+
+(defmethod make-template ((kind (eql 'subseq)) (spec cons))
+ (make-instance 'subseq-template :spec spec))
+
+(defmethod make-template ((kind (eql 'elt)) (spec cons))
+ (make-instance 'elt-template :spec spec))
+
+(defmethod make-template ((kind (eql 'aref)) (spec cons))
+ (make-instance 'aref-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nth)) (spec cons))
+ (make-instance 'nth-template :spec spec))
+
+(defmethod make-template ((kind (eql 'nthcdr)) (spec cons))
+ (make-instance 'nthcdr-template :spec spec))
+
+
+
+;;;;===========================================================================
+;;;; Implementation.
+
+;;; Symbol Templates.
+;;; Specification is
+;;;
+;;; (symbol <symbol>)
+
+(defun symbol-template-symbol (x)
+ (declare (type symbol-template x))
+ (assert (symbol-template-p x) (x) "Non symbol template ~S." x)
+ (let ((spec (template-spec x)))
+ (cond ((symbolp spec) spec)
+ ((consp spec) (second spec)))))
+
+
+;;; Number template
+;;; Specification is
+;;;
+;;; (<number type> <number>)
+;;; or
+;;;
+;;; <number>
+
+(defun number-template-number (x)
+ (declare (type number-template x))
+ (assert (number-template-p x) (x) "Non number template ~S." x)
+ (let ((spec (template-spec x)))
+ (etypecase spec
+ (symbol spec)
+ (number spec)
+ (cons (second spec)))))
+
+
+(defun number-template-numeric-type (x)
+ (declare (type number-template x))
+ (let ((n (number-template-number x)))
+ (if (numberp n)
+ (type-of n)
+ (first (template-spec x)))))
+
+(defun number-template-numeric-class (x)
+ (declare (type number-template x))
+ (let ((n (number-template-number x)))
+ (if (numberp n)
+ (class-of n)
+ (find-class (first (template-spec x))))))
+
+
+
+
+;;; Sequence Templates.
+;;; Specification is
+;;;
+;;; (<sequence subtype> . <destructuring template lambda list>)
+;;; or
+;;; (subseq <from> <to> . <destructuring template lambda list>)
+
+(defun sequence-template-lambda-list (x)
+ (declare (type sequence-template x))
+ (assert (sequence-template-p x) (x) "Non sequence template ~S." x)
+ (rest (template-spec x)))
+
+
+;;; Vector Templates.
+;;; Specification is
+;;;
+;;; (<vector type specifier> . <destructuring template lambda list>)
+
+(defun vector-template-element-type (x)
+ (declare (type vector-template x))
+ (assert (vector-template-p x) (x) "Non vector template ~S." x)
+ (let ((spec (type-template-type-spec x)))
+ (if (consp spec)
+ (destructuring-bind (vector-kwd &optional (element-type '*) size)
+ spec
+ (declare (ignore vector-kwd size))
+ element-type)
+ '*)))
+
+
+(defun vector-template-size (x)
+ (declare (type vector-template x))
+ (assert (vector-template-p x) (x) "Non vector template ~S." x)
+ (let ((spec (type-template-type-spec x)))
+ (if (consp spec)
+ (destructuring-bind (vector-kwd &optional element-type (size '*))
+ spec
+ (declare (ignore vector-kwd element-type))
+ size)
+ '*)))
+
+
+;;; Array Templates.
+;;; Specification is
+;;;
+;;; (array (['*' | <element type>] [<dimension spec>]) <shape template>)
+;;; or
+;;; (<array type specifier> <shape template>)
+
+
+(defun array-template-shape-template (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((t-spec (template-spec x)))
+ (if (= 2 (list-length t-spec))
+ (second t-spec)
+ (third t-spec))))
+
+
+(defun array-template-element-type (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((type-spec (type-template-type-spec x)))
+ (if (consp type-spec)
+ (destructuring-bind (array-kwd &optional (element-type '*) dimension-spec)
+ type-spec
+ (declare (ignore array-kwd dimension-spec))
+ element-type)
+ '*)))
+
+
+(defun array-template-dimensions (x)
+ (declare (type array-template x))
+ (assert (array-template-p x) (x) "Non array template ~S." x)
+ (let ((type-spec (type-template-type-spec x)))
+ (if (consp type-spec)
+ (destructuring-bind (array-kwd &optional element-type (dimension-spec '*))
+ type-spec
+ (declare (ignore array-kwd element-type))
+ dimension-spec)
+ '*)))
+
+
+
+;;; Structure and Standard Object Templates.
+
+(defun structure-object-template-class (x)
+ (and (structure-object-template-p x)
+ (first (template-spec x))))
+
+(defun structure-object-template-slots (x)
+ (and (structure-object-template-p x)
+ (rest (template-spec x))))
+
+
+(defun standard-object-template-class (x)
+ (and (standard-object-template-p x)
+ (first (template-spec x))))
+
+(defun standard-object-template-slots (x)
+ (and (standard-object-template-p x)
+ (rest (template-spec x))))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression Templates.
+
+
+;;; AREF Templates.
+
+(defun aref-template-indexes (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non aref template ~S." x)
+ (let ((spec (template-spec x)))
+ (second spec)))
+
+
+(defun aref-template-element (x)
+ (declare (type aref-template x))
+ (assert (aref-template-p x) (x) "Non array template ~S." x)
+ (let ((spec (template-spec x)))
+ (third spec)))
+
+
+
+
+;;;===========================================================================
+;;; Template variables.
+;;; Let's walk down a template.
+;;; Note that there is an asymmetry here: I admit some containers to have
+;;; variables inside, but I do not search instances of a class for variables.
+;;; This is an asymmetry that would be way too hard to fix without more
+;;; introspective power (which is available in the MOP, but not standard.)
+
+(defgeneric collect-template-vars (template))
+
+(defmethod collect-template-vars ((template template))
+ (let ((spec (template-spec template)))
+ (nconc (collect-template-vars (car spec))
+ (collect-template-vars (cdr spec)))))
+
+(defmethod collect-template-vars ((template symbol-template))
+ (let ((template (symbol-template-symbol template)))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template))))
+
+
+(defmethod collect-template-vars ((template number-template))
+ (let ((template (number-template-number template)))
+ (etypecase template
+ (number ())
+ (symbol (cond ((and (variablep template) (not (variable-any-p template)))
+ (list template))
+ ((and (boundp template)
+ (numberp (symbol-value template)))
+ ;; This handles cases like #T(number pi)
+ ;; It may be too broad, but for the time being it seems ok.
+ nil)
+ (t
+ (error "Invalid number template ~S." template)))))))
+
+
+(defmethod collect-template-vars ((template symbol))
+ (when (and (variablep template) (not (variable-any-p template)))
+ (list template)))
+
+(defmethod collect-template-vars ((template null))
+ ())
+
+(defmethod collect-template-vars ((template cons))
+ (nconc (collect-template-vars (car template))
+ (collect-template-vars (cdr template))))
+
+(defmethod collect-template-vars ((template string))
+ ())
+
+
+(defmethod collect-template-vars ((template vector))
+ (loop for e across template
+ nconc (collect-template-vars e)))
+
+
+(defmethod collect-template-vars ((template array))
+ (loop for i below (array-total-size template)
+ nconc (collect-template-vars (row-major-aref template i))))
+
+
+(defmethod collect-template-vars ((template t))
+ ())
+
+;;; end of file -- templates.lisp --
diff -rN -u old-cl-unification-1/test/unification-tests.lisp new-cl-unification-1/test/unification-tests.lisp
--- old-cl-unification-1/test/unification-tests.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/test/unification-tests.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,297 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; unification-tests.lisp --
+;;;; CL-UNIFICATION test suite. Requires ptester, the public version of
+;;;; Franz's util.test package.
+
+(defpackage "IT.UNIMIB.DISCO.MA.CL.EXT.DACF.UNIFICATION.TESTS"
+ (:use "CL" "UNIFY" "PTESTER")
+ (:nicknames "CL.EXT.DACF.UNIFICATION.TESTS" "UNIFY.TESTS"))
+
+(in-package "UNIFY.TESTS")
+
+;; nil seems like a lousy default for this
+(setf *error-protect-tests* t)
+
+(with-tests (:name "basic constant unification")
+ (test t (unify:environment-p (unify 42 42)))
+
+ (test-error (unify 42 12) :condition-type 'unification-failure)
+
+ (test-error (unify 42 'a) :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify 'a 'a)))
+
+ (test t (unify:environment-p (unify '(a s d) '(a s d))))
+
+ (test t (unify:environment-p (unify '(a (s 42) d) '(a (s 42) d))))
+
+ (test-error (unify '(a (s forty-two) d) '(a (s 42) z))
+ :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify #(a s d) #(a s d))))
+
+ (test t (unify:environment-p (unify #2a((a s d) (a s d))
+ #2a((a s d) (a s d)))))
+
+ (test-error (unify #2a((a s d) (a s d))
+ #2a((a s d) (a 42 d)))
+ :condition-type 'unification-failure)
+
+ (test t (unify:environment-p (unify "I am a string" "I am a string")))
+
+ (test-error (unify "I am a string" "I am A string")
+ :condition-type 'unification-failure)
+
+ (test t (let ((*unify-string-case-sensitive-p* nil))
+ (unify:environment-p (unify "I am a string" "I am A string"))))
+
+ )
+
+
+(with-tests (:name "variables unification")
+ (test '(42 T) (find-variable-value '?x (unify 42 '?x))
+ :multiple-values t)
+ (test '(NIL NIL) (find-variable-value '?y (unify 42 '?x))
+ :multiple-values t)
+
+ (test '(42 T) (find-variable-value '?x (unify '?x 42))
+ :multiple-values t)
+
+ (test '(s T) (v? '?x (unify '(a (?x 42) d) '(a (s 42) d)))
+ :multiple-values t)
+ (test '(s T) (v? '?x (unify '(a (?x 42) d) '(a (s 42) d)))
+ :multiple-values t)
+
+ (test '((?x 42) T) (v? '?z (unify '(a (?x 42) d) '(a ?z d)))
+ :multiple-values t :test 'equal)
+
+ (test '(NIL T) (v? '?x (unify '(a (?x 42) d) '(a (() 42) d)))
+ :multiple-values t)
+
+ (test '(NIL NIL) (v? '?variable (unify '(a (() 42) d) '(a (?x 42) d)))
+ :multiple-values t)
+
+ (test t (unify:environment-p (unify '_ '(1 2 3))))
+
+ (test t (unify:environment-p (unify '_ '(1 _ 3))))
+
+ (test t (unify:environment-p (unify '(1 2 _) '(1 _ 3))))
+
+ (test t (unify:environment-p (unify '(1 2 _) '(1 _ 3))))
+
+ (test '(2 T) (v? '?x (unify #(1 2 _) #(1 ?x 3)))
+ :multiple-values t)
+
+ (test-error (unify '(1 2 _) #(1 _ 3))
+ :condition-type 'unification-failure
+ :known-failure t
+ :fail-info "Unification on SEQUENCEs does not discriminate type.")
+ )
+
+
+(with-tests (:name "basic templates unification")
+
+ (with-tests (:name "number templates unification")
+ (test t (unify:environment-p (unify #T(number 42) 42)))
+ (test t (unify:environment-p (unify 42 #T(number 42))))
+ (test t (unify:environment-p (unify 42 #T(integer 42))))
+ (test t (unify:environment-p (unify 42 #T(fixnum 42))))
+
+ (test t (unify:environment-p (unify 42.0 #T(real 42))))
+ (test t (unify:environment-p (unify #C(0 1) #T(complex #C(0 1)))))
+
+ (test '(42 T) (v? '?x (unify #T(number ?x) 42)) :multiple-values t)
+ (test '(42 T) (v? '?x (unify #(0 1 42 3 4 5) #T(sequence 0 1 ?x 3 4 5)))
+ :multiple-values t)
+
+ (test-error (unify 42 #T(float 42.0))
+ :condition-type 'unification-failure
+ :known-failure t
+ :fail-info "Check rules for unification on numeric tower.")
+ )
+ )
+
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+
+(defclass test1 ()
+ ((a :initarg :a :accessor a)
+ (b :initarg :b :accessor b)))
+
+(defstruct s-root a)
+(defstruct (s-child (:include s-root)) b)
+
+)
+
+(with-tests (:name "advanced templates unification")
+
+ (test '(a T) (v? '?x (unify #2A((1 #T(symbol ?x) 3) (_ _ _))
+ #2A((1 a 3) (q w e))))
+ :multiple-values t)
+
+ (test '(#\Space T) (ignore-errors (v? '?x (unify "This is a string!" #T(elt 4 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify '(0 1 42 3 4 5) #T(nth 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify '(0 1 42 3 4 5) #T(elt 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify #(0 1 42 3 4 5) #T(aref 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (ignore-errors (v? '?x (unify #(0 1 42 3 4 5) #T(elt 2 ?x))))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #2a((0 1 42 3 4 5)) #T(aref (0 2) ?x)))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #T(aref (0 2) 42) #2a((0 1 ?x 3 4 5))))
+ :multiple-values t)
+
+ (test '(42 T) (v? '?x (unify #2a((0 1 ?x 3 4 5)) #T(aref (0 2) 42)))
+ :multiple-values t)
+
+ (test-error (unify #(0 1 42 3 4 5) #T(nth 2 ?x))
+ :condition-type 'unification-failure
+ :announce t)
+
+ (test '(foo (1) (2) (3)) (let ((result-env (unify '(0 1 #T(list foo _ &rest ?z) 42)
+ '(0 1 (?y bar (1) (2) (3)) 42)))
+ )
+ (cons (v? '?y result-env)
+ (v? '?z result-env)))
+ :test #'equal)
+
+ (test '(2 T) (v? '?x (unify #T(test1 a #T(list 1 ?x 3 &rest) b "woot")
+ (make-instance 'test1 :a '(1 2 3) :b "woot")))
+ :multiple-values t)
+
+ (test-error (unify #T(s-root s-root-a '(1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4)))
+ :condition-type 'unification-failure
+ :announce t
+ ;; #T reader non evaluating sub forms.
+ )
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(list 1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a (1 ?x 3 4))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(list 1 ?x 3 &rest))
+ (make-s-root :a '(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #(1 ?x 3 4))
+ (make-s-root :a #(1 2 3 4))))
+ :multiple-values t)
+
+ (test '(2 T) (v? '?x (unify #T(s-root s-root-a #T(vector 1 ?x 3 &rest))
+ (make-s-root :a #(1 2 3 4))))
+ :multiple-values t)
+
+ )
+
+(define-condition inner-unification-failure (unification-failure) ()
+ (:default-initargs :format-control "Inner unification-failure."))
+(define-condition inner-error (simple-error) ()
+ (:default-initargs :format-control "Inner error."))
+(define-condition outer-error (simple-error) ()
+ (:default-initargs :format-control "Outer error."))
+
+(defun nested-match-cases (input)
+ (match-case (input)
+ ('(:a ?a :b #T(list &rest ?bs))
+ (loop for b in ?bs
+ collect (match-case (b)
+ ('(:c ?c) ?c)
+ ('(:d ?d) ?d)
+ (otherwise (error 'inner-error)))))
+ (otherwise (error 'outer-error))))
+
+(defun nested-matchf-cases (input)
+ (matchf-case (input)
+ ((:a ?a :b #T(list &rest ?bs))
+ (loop for b in ?bs
+ collect (matchf-case (b)
+ ((:c ?c) ?c)
+ ((:d ?d) ?d)
+ (otherwise (error 'inner-error)))))
+ (otherwise (error 'outer-error))))
+
+(with-tests (:name "control flow")
+ (test-error (nested-match-cases '(:a 42 :b 33)) :condition-type 'outer-error)
+ (test-error (nested-match-cases '(:a 42 :b (33 42))) :condition-type 'inner-error)
+ (test '(42 43 44) (nested-match-cases '(:a 42 :b ((:d 42) (:c 43) (:c 44))))
+ :test #'equal)
+
+ (test-error (nested-matchf-cases '(:a 42 :b 33)) :condition-type 'outer-error)
+ (test-error (nested-matchf-cases '(:a 42 :b (33 42))) :condition-type 'inner-error)
+ (test '(42 43 44) (nested-matchf-cases '(:a 42 :b ((:d 42) (:c 43) (:c 44))))
+ :test #'equal)
+
+ (test-error (match ('(x) '(x) :errorp nil)
+ (error 'inner-unification-failure))
+ :condition-type 'inner-unification-failure)
+
+ (test-error (matchf ((x) '(x) :errorp nil)
+ (error 'inner-unification-failure))
+ :condition-type 'inner-unification-failure)
+
+ (with-tests (:name "final t-or-otherwise")
+ (test :success (matching ()
+ (('x 'y) :fail)
+ (t :success)))
+ (test :success (matching ()
+ (('x 'y) :fail)
+ (otherwise :success)))
+ (test :success (match-case ('x)
+ ('y :fail)
+ (t :success)))
+ (test :success (match-case ('x)
+ ('y :fail)
+ (otherwise :success)))
+ (test :success (matchf-case ('(x))
+ ((y) :fail)
+ (t :success)))
+ (test :success (matchf-case ('(x))
+ ((y) :fail)
+ (otherwise :success))))
+
+ (test-error (matching ()
+ (('x 'y) :fail)
+ (('x 'x) (error 'inner-unification-failure))
+ (('?x 'x) x))
+ :condition-type 'inner-unification-failure)
+
+ (test-error (match-case ('(x))
+ ('(y) :fail)
+ ('(x) (error 'inner-unification-failure))
+ ('(?x) x))
+ :condition-type 'inner-unification-failure)
+
+ (test-error (matchf-case ('(x))
+ ((y) :fail)
+ ((x) (error 'inner-unification-failure))
+ ((?x) x))
+ :condition-type 'inner-unification-failure)
+
+ (test 'sym (match-case ('(sym))
+ ('(a) :fail)
+ ('(b) :fail)
+ ('(?x) x)))
+
+ (test 'sym (matchf-case ('(sym))
+ ((a) :fail)
+ ((b) :fail)
+ ((?x) x)))
+ )
+
+
+;;;; end of file -- unification-tests.lisp --
diff -rN -u old-cl-unification-1/unification-package.lisp new-cl-unification-1/unification-package.lisp
--- old-cl-unification-1/unification-package.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/unification-package.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,90 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; unification-package.lisp --
+;;;; Package definition for the CL-UNIFICATION library.
+;;;;
+;;;; Copyright (c) 2004-2011 Marco Antoniotti
+;;;; See file COPYING for copyright licensing information.
+
+
+(defpackage "IT.UNIMIB.DISCO.MA.CL.EXT.DACF.UNIFICATION" (:use "CL")
+ (:nicknames "CL.EXT.DACF.UNIFICATION" "UNIFY" "unify" "CL-UNIFICATION")
+ (:documentation "The CL.EXT.DACF.UNIFICATION Package.
+
+This package contains all the definitions necessary for the general
+Common Lisp unifier to work.
+The package also has the \"UNIFY\" nickname.")
+
+ (:export
+ "*UNIFY-STRING-CASE-SENSITIVE-P*"
+ "UNIFY"
+
+ "APPLY-SUBSTITUTION"
+
+ "UNIFICATION-FAILURE"
+ "UNIFICATION-VARIABLE-UNBOUND"
+ )
+
+ (:export
+ "ENVIRONMENT"
+ "ENVIRONMENT-P"
+ "MAKE-EMPTY-ENVIRONMENT"
+ "EMPTY-ENVIRONMENT-P"
+ "MAKE-SHARED-ENVIRONMENT"
+ "COPY-ENVIRONMENT"
+
+ "PUSH-FRAME"
+ "POP-FRAME"
+
+ "BINDING-VARIABLE"
+ "BINDING-VALUE"
+
+ "EXTEND-ENVIRONMENT"
+ "FILL-ENVIRONMENT"
+ "FILL-ENVIRONMENT*"
+
+ "FIND-VARIABLE-VALUE"
+ "V?"
+
+ "NEW-VAR"
+ "VARIABLEP"
+ "VARIABLE-ANY-P"
+ )
+
+ (:export
+ "MATCH"
+ "MATCHF"
+ "MATCH-COND"
+ "MATCHF-COND"
+ "MATCHING"
+ "MATCH-CASE"
+ "MATCH-ECASE"
+ "MATCHF-CASE"
+ "MATCHF-ECASE"
+ )
+
+ (:export
+ "UNIFY*"
+ "UNIFY-EQUATIONS"
+ "UNIFY-EQUATIONS*")
+
+ (:export
+ "ENABLE-TEMPLATE-READER"
+ "MAKE-TEMPLATE"
+ "TEMPLATEP"
+ "TEMPLATE-SPEC"
+
+ "COLLECT-TEMPLATE-VARS"
+ )
+
+ #+cl-ppcre
+ (:export
+ "REGULAR-EXPRESSION"
+ "REGEXP")
+
+ #+named-readtables
+ (:export
+ "TEMPLATE-READTABLE")
+ )
+
+;;;; end of file -- unification-package.lisp --
diff -rN -u old-cl-unification-1/unifier.lisp new-cl-unification-1/unifier.lisp
--- old-cl-unification-1/unifier.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/unifier.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,985 @@
+;;; -*- Mode: Lisp -*-
+
+;;; unifier.lisp
+;;; General CL structures unifier.
+
+;;;; See file COPYING for copyright licensing information.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+(defgeneric unify (a b &optional env &key &allow-other-keys)
+ (:documentation
+ "Unifies two objects A and B given a substitution ENV.
+A is a Common Lisp object and B is either a Common Lisp object or a
+\"template\", A and B can be commuted.
+
+The unification rules are rather complex. Each method of the generic
+function implements a specific rule of unification.
+
+The generic function returns a `substitution' upon success or it
+signals a UNIFICATION-FAILURE condition upon failure."))
+
+
+
+;;;===========================================================================
+;;; Simple, non template methods.
+
+(defmethod unify ((a symbol) (b list)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ "Unifies a symbol A and a list B in an environment ENV.
+If A is not a variable then an error of type UNIFICATION-FAILURE is
+signaled. If A is a unification variable, then the environment ENV is
+extended with a binding for A to B, unless the occurrence check is
+called and fails, in which case an error is signaled."
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with a list: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b list) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ "Unifies a symbol B and a list A in an environment ENV.
+If A is not a variable then an error of type UNIFICATION-FAILURE is
+signaled. If A is a unification variable, then the environment ENV is
+extended with a binding for A to B, unless the occurrence check is
+called and fails, in which case an error is signaled."
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a list with a symbol: ~S ~S."
+ :format-arguments (list b a)))))
+
+
+(defmethod unify ((a list) (b list)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ "Unifies a list A and a list B in an environment ENV.
+The unification procedure proceedes recursively on each element of
+both lists. If two elements cannot be unified then an error of type
+UNIFICATION-FAILURE is signaled. Otherwise a possibly extended
+environment is returned."
+ (unify (rest a) (rest b) (unify (first a) (first b) env)))
+
+
+
+(defmethod unify ((a number) (b number)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ "Unifies two numbers A and B.
+Two numbers unify only if and only if they are equal as per the function #'=, in
+which case an unmodified envirironment ENV is returned.
+Otherwise an error of type UNIFICATION-FAILURE is signalled.
+Of course, asking for unification of two floating point numbers may
+not yield the expected result."
+ (if (= a b)
+ env
+ (error 'unification-failure
+ :format-control "Cannot unify two different numbers: ~S ~S."
+ :format-arguments (list a b))))
+
+
+(defparameter *unify-string-case-sensitive-p* t)
+
+(defmethod unify ((a character) (b character)
+ &optional (env (make-empty-environment))
+ &key
+ (case-sensitive *unify-string-case-sensitive-p*)
+ &allow-other-keys)
+ "Unifies two strings A and B.
+Two CHARACTERs A and B unify if and only if they satisfy either #'CHAR= or
+#'CHAR-EQUAL. The choice of which of test to perform (#'CHAR= or #'CHAR-EQUAL)
+is made according to the value of the variable
+*UNIFY-STRING-CASE-SENSITIVE-P*, which defaults to T.
+If A and B unify then an unmodified environment ENV is returned,
+otherwise an error of type UNIFICATION-FAILURE is signaled."
+ (cond ((and case-sensitive (char= a b))
+ env)
+ ((and (not case-sensitive) (char-equal a b))
+ env)
+ (t
+ (error 'unification-failure
+ :format-control "Cannot unify two different characters: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((a string) (b string)
+ &optional (env (make-empty-environment))
+ &key
+ (case-sensitive *unify-string-case-sensitive-p*)
+ &allow-other-keys)
+ "Unifies two strings A and B.
+Two strings A and B unify if and only if they satisfy either #'STRING= or
+#'STRING-EQUAL. The choice of which of test to perform (#'STRING= or #'STRING-EQUAL)
+is made according to the value of the variable
+*UNIFY-STRING-CASE-SENSITIVE-P*, which defaults to T.
+If A and B unify then an unmodified environment ENV is returned,
+otherwise an error of type UNIFICATION-FAILURE is signaled."
+ (cond ((and case-sensitive (string= a b))
+ env)
+ ((and (not case-sensitive) (string-equal a b))
+ env)
+ (t
+ (error 'unification-failure
+ :format-control "Cannot unify two different strings: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((a symbol) (b string)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with a string: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b string) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a string with a symbol: ~S ~S."
+ :format-arguments (list b a)))))
+
+
+(defmethod unify ((a symbol) (b symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ ((variable-any-p b) env)
+ ((variablep b) (var-unify b a env))
+ ((eq a b) env)
+ (t (error 'unification-failure
+ :format-control "Cannot unify two different symbols: ~S ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((a symbol) (b t)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (call-next-method))))
+
+
+(defmethod unify ((b t) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (call-next-method))))
+
+
+(defmethod unify ((a symbol) (b array)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify a symbol with ~
+ an array or vector: ~S and ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((b array) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (error 'unification-failure
+ :format-control "Cannot unify an array or vector with a symbol: ~S and ~S."
+ :format-arguments (list a b)))))
+
+
+(defmethod unify ((as vector) (bs vector)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unless (= (length as) (length bs))
+ (error 'unification-failure
+ :format-control "Cannot unify two vectors of different length: ~D and ~D."
+ :format-arguments (list (length as) (length bs))))
+ (loop for a across as
+ for b across bs
+ for mgu = (unify a b env) then (unify a b mgu)
+ finally (return mgu)))
+
+
+(defmethod unify ((s1 sequence) (s2 sequence)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unless (= (length s1) (length s2))
+ (error 'unification-failure
+ :format-control "Cannot unify two sequences of different length: ~D and ~D."
+ :format-arguments (list (length s1) (length s2))))
+ (loop for i from 0 below (length s1)
+ for j from 0 below (length s2)
+ for mgu = (unify (elt s1 i) (elt s2 j) env) then (unify (elt s1 i) (elt s2 j) mgu)
+ finally (return mgu)))
+
+
+
+(defgeneric untyped-unify (a b &optional env))
+
+(defmethod untyped-unify ((as list) (bs vector)
+ &optional (env (make-empty-environment)))
+ (loop for a in as
+ for b across bs
+ for mgu = (unify a b env) then (unify a b mgu)
+ finally (return mgu)))
+
+
+(defmethod untyped-unify ((as vector) (bs list)
+ &optional (env (make-empty-environment)))
+ (untyped-unify bs as env))
+
+(defmethod untyped-unify ((a t) (b t) &optional (env (make-empty-environment)))
+ (unify a b env))
+
+
+(defmethod unify ((as array) (bs array)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unless (= (array-total-size as) (array-total-size bs))
+ (error 'unification-failure
+ :format-control "Cannot unify two arrays of different total size: ~D and ~D."
+ :format-arguments (list (array-total-size as) (array-total-size bs))))
+ (loop for ai from 0 below (array-total-size as)
+ for bi from 0 below (array-total-size bs)
+ for mgu = (unify (row-major-aref as ai) (row-major-aref bs bi) env)
+ then (unify (row-major-aref as ai) (row-major-aref bs bi) mgu)
+ finally (return mgu)))
+
+
+;;; Catch all method.
+
+(defmethod unify ((a t) (b t)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (if (equalp a b)
+ env
+ (error 'unification-failure
+ :format-control "Cannot unify a ~S and a ~S: ~S ~S."
+ :format-arguments (list (type-of a) (type-of b) a b))))
+
+
+;;;===========================================================================
+;;; Templates methods.
+
+
+;;; valid-template-p --
+;;; Useful later. Tests whether the object X can be considered a template.
+;;; This should probably become a generic function.
+
+(defun valid-template-p (x)
+ (or (symbolp x)
+ (consp x)
+ (numberp x)
+ (arrayp x)
+ (typep (class-of x) 'structure-class)
+ (typep (class-of x) 'standard-class)
+ (typep (class-of x) 'built-in-class)
+ (template-p x)))
+
+
+;;; Special catch all method.
+
+(defmethod unify ((x template) (y template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Unification of two templates of type ~A and ~A ~
+ has not been yet implemented."
+ :format-arguments (list (class-name (class-of x))
+ (class-name (class-of y)))))
+
+
+;;;---------------------------------------------------------------------------
+;;; NIL special unification methods.
+
+(defmethod unify ((x null) (y null)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ env)
+
+
+(defmethod unify ((x null) (nt nil-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ env)
+
+
+(defmethod unify ((nt nil-template) (x null)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ env)
+
+
+(defmethod unify ((nt1 nil-template) (nt2 nil-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ env)
+
+
+;;;---------------------------------------------------------------------------
+;;; Symbol methods.
+
+(defmethod unify ((a symbol) (b symbol-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (cond ((variable-any-p a) env)
+ ((variablep a) (var-unify a b env))
+ (t (unify a (symbol-template-symbol b) env))))
+
+
+(defmethod unify ((b symbol-template) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+(defmethod unify ((a symbol) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify symbol ~S with template ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((b template) (a symbol)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Number template methods.
+
+(defmethod unify ((a number) (b number-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a (number-template-number b) env))
+
+
+(defmethod unify ((b number-template) (a number)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+(defmethod unify ((a number) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify the number ~S with template ~S."
+ :format-arguments (list a b)))
+
+(defmethod unify ((b template) (a number)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Sequence (List) template methods
+
+(defmethod unify ((a sequence) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a sequence with a non sequence ~
+ or non sequence access template: ~S and ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((b template) (a sequence)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+#| Needs to be fixed.
+(defmethod unify ((a list) (b lambda-template) &optional (env (make-empty-environment)))
+ (unify a (template-spec b) env))
+
+
+(defmethod unify ((b lambda-template) (a list) &optional (env (make-empty-environment)))
+ (unify (template-spec b) a env))
+|#
+
+
+;;; The next is incomplete and does not signal appropriate errors.
+
+(defmethod unify ((a list) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a list with a non-list template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a list) (b sequence-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (let ((template-lambda-list (sequence-template-lambda-list b))
+ (ll (list-length a))
+ )
+ (multiple-value-bind (vars optionals keys rest)
+ (parse-extended-ordinary-lambda-list template-lambda-list
+ :ordinary-variable-test #'valid-template-p
+ :optional-variable-test #'valid-template-p
+ :key-variable-test #'valid-template-p
+ :rest-variable-test #'valid-template-p
+ )
+
+ (let* ((n-vars (list-length vars))
+ (n-optionals (list-length optionals))
+ (env (unify (subseq a 0 (min ll (list-length vars)))
+ vars
+ env))
+ )
+ (when (and optionals (>= ll (+ n-vars n-optionals)))
+ (setf env (unify (subseq a n-vars (+ n-vars n-optionals)) optionals env)))
+ (when (and rest (>= ll (+ n-vars n-optionals)))
+ (setf env (unify (subseq a (+ n-vars n-optionals)) (first rest) env)))
+ (when keys (warn "Sorry matching of keywords ~S not yet implemented." keys))
+ env
+ ))))
+
+
+
+(defmethod unify ((b template) (a list)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Vector template methods.
+
+(defmethod unify ((a vector) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a vector with a non-vector template: ~S ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a vector) (b sequence-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (let ((template-lambda-list (sequence-template-lambda-list b))
+ (vl (length a))
+ )
+ (multiple-value-bind (vars optionals keys rest)
+ (parse-extended-ordinary-lambda-list template-lambda-list
+ :ordinary-variable-test #'valid-template-p
+ :optional-variable-test #'valid-template-p
+ :key-variable-test #'valid-template-p
+ :rest-variable-test #'valid-template-p
+ )
+
+ (let ((n-vars (list-length vars))
+ (n-optionals (list-length optionals))
+ )
+ (loop for v in vars
+ for e across (subseq a 0 (list-length vars))
+ for mgu = (unify v e env) then (unify v e mgu)
+ finally (setf env mgu))
+ (when (and optionals (>= vl (+ n-vars n-optionals)))
+ (loop for v in optionals
+ for e across (subseq a n-vars (+ n-vars n-optionals))
+ for mgu = (unify v e env) then (unify v e mgu)
+ finally (setf env mgu)))
+ (when (and rest (>= vl (+ n-vars n-optionals)))
+ (setf env (unify (subseq a (+ n-vars n-optionals)) (first rest) env)))
+ (when keys (warn "Sorry matching of keywords ~S not yet implemented." keys))
+ env
+ ))))
+
+
+(defmethod unify ((b template) (a vector)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Array template methods.
+
+(defmethod unify ((a array) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify an array with a non array ~
+ or non array access template: ~S and ~S."
+ :format-arguments (list a b)))
+
+(defmethod unify ((b template) (a array)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+(defun unify-array-row (array dims shape-template indexes env)
+ (cond ((null dims) env)
+ ((= (list-length dims) 1)
+ ;; Unify the row with the shape-template.
+ (let ((row (make-array (first dims)
+ :displaced-to array
+ :displaced-index-offset
+ (apply #'array-row-major-index
+ array
+ (append indexes (list 0))))))
+ (declare (dynamic-extent row)
+ (type array row))
+ (untyped-unify row shape-template env)))
+ (t
+ (loop for i from 0 below (first dims)
+ for row-template in shape-template
+ do (unify-array-row array
+ (rest dims)
+ row-template
+ (append indexes (list i))
+ env)
+ finally (return env)))
+ ))
+
+
+(defun unify-array-rows (array shape-template env)
+ (unify-array-row array (array-dimensions array) shape-template () env))
+
+
+(defmethod unify ((a array) (b array-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (let ((template-spec (template-spec b)))
+ (if (= 2 (length template-spec))
+
+ ;; Template is (<array type specifier> <shape-template>)
+ (destructuring-bind (array-type-spec shape-template)
+ template-spec
+ (declare (ignore array-type-spec))
+ ;; Missing check for type-spec.
+ (unify-array-rows a shape-template env))
+
+ ;; Template is (array (['*' | <element type>] [<dimension spec>]) <shape template>)
+ (destructuring-bind (array-kwd type-spec shape-template)
+ template-spec
+ (declare (ignore array-kwd type-spec))
+ ;; Missing check for type-spec.
+ (unify-array-rows a shape-template env))
+ )))
+
+
+
+;;;---------------------------------------------------------------------------
+;;; Standard object template methods.
+
+(defmethod unify ((a standard-object) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a standard object with a ~
+ non standard object template: ~S and ~S."
+ :format-arguments (list a b)))
+
+#|| Old version with heavy syntax
+(defmethod unify ((a standard-object) (b standard-object-template)
+ &optional (env (make-empty-environment)))
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a template for class ~S."
+ :format-arguments (list (class-of a) class)))
+ (flet ((slot-spec-unify (accessor-spec reader value-template mgu)
+ (ecase accessor-spec
+ (slot-value
+ (unify (slot-value a reader) value-template mgu))
+ (slot-accessor
+ (unify (funcall reader a) value-template mgu))))
+ )
+ (if template-slot-specs
+ (loop for (accessor-spec reader value-template) in template-slot-specs
+ for mgu = (slot-spec-unify accessor-spec reader value-template env)
+ then (slot-spec-unify accessor-spec reader value-template mgu)
+ finally (return mgu))
+ env))))
+||#
+
+
+(defmethod unify ((a standard-object) (b standard-object-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a template for class ~S."
+ :format-arguments (list (class-of a) class)))
+ (flet ((slot-spec-unify (reader value-template mgu)
+ (etypecase reader
+ (list
+ (assert (eq (first reader) 'slot-value))
+ (unify (slot-value a (second reader)) value-template mgu))
+ ((or function symbol)
+ (unify (funcall reader a) value-template mgu))))
+ )
+ (if template-slot-specs
+ (loop for (reader value-template) on template-slot-specs by #'cddr
+ for mgu = (slot-spec-unify reader value-template env)
+ then (slot-spec-unify reader value-template mgu)
+ finally (return mgu))
+ env))))
+
+
+(defmethod unify ((b template) (a standard-object)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Structure object template methods.
+
+(defmethod unify ((a structure-object) (b template)
+ &optional (env)
+ &key &allow-other-keys)
+ (declare (ignore env))
+ (error 'unification-failure
+ :format-control "Cannot unify a structure object with ~
+ a non structure object template: ~S and ~S."
+ :format-arguments (list a b)))
+
+
+(defmethod unify ((a structure-object) (b structure-object-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (class &rest template-slot-specs)
+ (template-spec b)
+ (unless (typep a class)
+ (error 'unification-failure
+ :format-control "Cannot unify an instance of ~S with a ~
+ template for structure ~S."
+ :format-arguments (list (class-of a) class)))
+ (if template-slot-specs
+ (loop for (reader value-template) on template-slot-specs by #'cddr
+ for mgu = (unify (funcall reader a) value-template env)
+ then (unify (funcall reader a) value-template mgu)
+ finally (return mgu))
+ env)))
+
+
+(defmethod unify ((b template) (a structure-object)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression template SUBSEQ methods.
+
+;;; SEQUENCE
+;;; For non LIST and non VECTOR possible SEQUENCE types.
+
+(defmethod unify ((a sequence) (b subseq-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (subseq-kwd from to &rest spec)
+ (template-spec b)
+ (declare (ignore subseq-kwd))
+ (let* ((seq-type (type-of a))
+ (seq-template-kind (if (symbolp seq-type)
+ seq-type
+ (first seq-type))) ; Stupid FTTB.
+ )
+ (unify (subseq a from to)
+ (make-template seq-template-kind `(,seq-template-kind ,@spec))
+ env))))
+
+
+;;; LIST
+
+(defmethod unify ((a list) (b subseq-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (subseq-kwd from to &rest spec)
+ (template-spec b)
+ (declare (ignore subseq-kwd))
+ (unify (subseq a from to)
+ (make-template 'list `(list ,@spec))
+ env)))
+
+
+;;; VECTOR
+
+(defmethod unify ((a vector) (b subseq-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (subseq-kwd from to &rest spec)
+ (template-spec b)
+ (declare (ignore subseq-kwd))
+ (let ((seq-type (type-of a)))
+ (unify (subseq a from to)
+ (make-template seq-type `(,seq-type ,@spec))
+ env))))
+
+
+(defmethod unify ((b subseq-template) (a sequence)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Expression templates
+
+;;; AREF methods.
+
+(defmethod unify ((a array) (b aref-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (aref-kwd indexes value-template)
+ (template-spec b)
+ (declare (ignore aref-kwd))
+ ;; Missing check on index spec.
+ (unless (consp indexes)
+ (setf indexes (list indexes)))
+ (unify (apply #'aref a indexes) value-template env)))
+
+
+;;; Necessary due to standard method sorting.
+
+(defmethod unify ((a vector) (b aref-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (aref-kwd indexes value-template)
+ (template-spec b)
+ (declare (ignore aref-kwd))
+ ;; Missing check on index spec.
+ (when (and (consp indexes) (> (length indexes) 1))
+ (error 'unification-failure
+ :format-control "Cannot unify a vector with an element ~
+ too many dimensions down~@
+ (AREF #(...)~{ ~S~})."
+ :format-arguments (list indexes)
+ ))
+ (unless (consp indexes)
+ (setf indexes (list indexes)))
+ (unify (apply #'aref a indexes) value-template env)))
+
+
+(defmethod unify ((b aref-template) (a array)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;; ELT methods.
+;;; LIST and VECTOR methods must be specified separatedly because of
+;;; the UNIFY (VECTOR TEMPLATE) methods above. It is a snag, but a
+;;; relatively small one. Besides, they are more efficient.
+;;; The (SEQUENCE ELT-TEMPLATE) ELT-TEMPLATE method is left for those
+;;; sequences which, according to the ANSI spec may exist and not be
+;;; either VECTOR or LIST.
+
+(defmethod unify ((a sequence) (b elt-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (elt-kwd index value-template)
+ (template-spec b)
+ (declare (ignore elt-kwd)
+ (type fixnum index))
+ ;; Missing index check.
+ (unify (elt a index) value-template env)))
+
+
+(defmethod unify ((a vector) (b elt-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (elt-kwd index value-template)
+ (template-spec b)
+ (declare (ignore elt-kwd)
+ (type fixnum index))
+ ;; Missing index check.
+ (unify (aref a index) value-template env)))
+
+
+(defmethod unify ((a list) (b elt-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (elt-kwd index value-template)
+ (template-spec b)
+ (declare (ignore elt-kwd)
+ (type fixnum index))
+ ;; Missing index check.
+ (unify (nth index a) value-template env)))
+
+
+(defmethod unify ((b elt-template) (a sequence)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;; NTH methods.
+
+(defmethod unify ((a list) (b nth-template)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (destructuring-bind (nth-kwd index value-template)
+ (template-spec b)
+ (declare (ignore nth-kwd))
+ ;; Missing index check.
+ (unify (nth index a) value-template env)))
+
+(defmethod unify ((b nth-template) (a list)
+ &optional (env (make-empty-environment))
+ &key &allow-other-keys)
+ (unify a b env))
+
+
+;;;---------------------------------------------------------------------------
+;;; Utilities.
+
+(defun unify* (a b &optional (env (make-empty-environment)))
+ (handler-case
+ (unify a b env)
+ (unification-failure (c) (values nil c))))
+
+
+(defun unify-equations (eqns &optional (env (make-empty-environment)))
+ (loop for (a b) in eqns
+ for result-env = (unify a b env) then (unify a b result-env)
+ finally (return result-env)))
+
+
+(defun unify-equations* (lhss rhss &optional (env (make-empty-environment)))
+ (loop for a in lhss
+ for b in rhss
+ for result-env = (unify a b env) then (unify a b result-env)
+ finally (return result-env)))
+
+
+;;;---------------------------------------------------------------------------
+;;; VAR-UNIFY
+
+(defparameter *occurrence-check-p* t)
+
+(defgeneric occurs-in-p (var pat env))
+
+(defun var-unify (var pat env)
+ (if (eq var pat)
+ env
+ (multiple-value-bind (value foundp)
+ (find-variable-value var env)
+ (cond (foundp
+ (unify value pat env))
+ ((and *occurrence-check-p*
+ (occurs-in-p var pat env))
+ (error 'unification-failure
+ :format-control "Variable ~S occurs in ~S."
+ :format-arguments (list var pat)))
+ (t
+ (extend-environment var pat env))))))
+
+
+
+#||
+(defmethod occurs-in-p ((var symbol) pat env)
+ (cond ((variablep pat)
+ (or (eq var pat)
+ (multiple-value-bind (value foundp)
+ (find-variable-value pat env)
+ (when foundp
+ (occurs-in-p var value env)))
+ ))
+ ((atom pat) nil)
+ ((consp pat)
+ (or (occurs-in-p var (first pat) env)
+ (occurs-in-p var (rest pat) env)))
+ (t
+ (error "unimplemented"))))
+||#
+
+
+(defmethod occurs-in-p ((var symbol) (pat symbol) env)
+ (when (variablep pat)
+ (or (eq var pat)
+ (multiple-value-bind (value foundp)
+ (find-variable-value pat env)
+ (when foundp
+ (occurs-in-p var value env)))
+ )))
+
+
+(defmethod occurs-in-p ((var symbol) (pat list) env)
+ (or (occurs-in-p var (first pat) env)
+ (occurs-in-p var (rest pat) env)))
+
+
+(defmethod occurs-in-p ((var symbol) (pat null) env)
+ ;; This is needed because of different precedence rules among lisps
+ ;; in COMPUTE-APPLICABLE-METHODS when NIL has to matched against
+ ;; SYMBOL and LIST.
+
+ ;; We know (assume) that VAR is not NIL.
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat array) env)
+ (loop for i from 0 below (array-total-size pat)
+ thereis (occurs-in-p var (row-major-aref pat i) env)))
+
+
+(defmethod occurs-in-p ((var symbol) (pat vector) env) ; This may be faster than the above.
+ (some #'(lambda (x) (occurs-in-p var x env)) pat))
+
+
+(defmethod occurs-in-p ((var symbol) (pat string) env) ; This is useless, but it's here for completeness.
+ (declare (ignore env))
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat number) env)
+ (declare (ignore env))
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat character) env)
+ (declare (ignore env))
+ nil)
+
+
+(defmethod occurs-in-p ((var symbol) (pat t) env)
+ (declare (ignore env))
+ (warn "Occurrence test unimplemented for pattern ~S of type ~S in variable ~S;~@
+ returning false."
+ pat
+ (type-of pat)
+ var)
+ nil)
+
+
+(defmethod occurs-in-p ((var t) (pat t) env)
+ (declare (ignore env))
+ (error "Occurrence test called on a non symbol ~S. Major problem."
+ var))
+
+;;; end of file -- unifier.lisp --
diff -rN -u old-cl-unification-1/variables.lisp new-cl-unification-1/variables.lisp
--- old-cl-unification-1/variables.lisp 1970-01-01 00:00:00.000000000 +0000
+++ new-cl-unification-1/variables.lisp 2013-07-04 18:11:12.000000000 +0000
@@ -0,0 +1,30 @@
+;;;; -*- Mode: Lisp -*-
+
+;;;; variables.lisp --
+
+;;;; See file COPYING for copyright licensing information.
+
+(in-package "CL.EXT.DACF.UNIFICATION") ; DACF = Data And Control Flow.
+
+
+(defun make-var-name (&optional (s (gensym "UV_")) (package *package*))
+ (declare (type (or string symbol character) s))
+ (intern (concatenate 'string "?" (string s)) package))
+
+
+(eval-when (:load-toplevel :execute)
+ (setf (fdefinition 'new-var) #'make-var-name))
+
+
+(defun variablep (x)
+ (and (symbolp x)
+ (or (char= (char (symbol-name x) 0) #\?)
+ (string= x "_"))))
+
+(defun variable-any-p (x)
+ (and (symbolp x)
+ (or (string= x "_")
+ (string= x "?_"))))
+
+
+;;; end of file -- variables.lisp --