Tuned feed-to-full.

Pascal J. Bourguignon [2015-10-25 23:29]
Tuned feed-to-full.
Filename
com.informatimago.www/blog/feed-to-full.lisp
com.informatimago.www/blog/fullfeed.xml
diff --git a/com.informatimago.www/blog/feed-to-full.lisp b/com.informatimago.www/blog/feed-to-full.lisp
index 1261e3a..55c1874 100755
--- a/com.informatimago.www/blog/feed-to-full.lisp
+++ b/com.informatimago.www/blog/feed-to-full.lisp
@@ -34,6 +34,12 @@
 ;;;;**************************************************************************
 (in-package "COMMON-LISP-USER")

+#+ccl (eval-when (:compile-toplevel :load-toplevel :execute)
+        (setf ccl:*default-external-format*           :unix
+              ccl:*default-file-character-encoding*   :utf-8
+              ccl:*default-line-termination*          :unix
+              ccl:*default-socket-character-encoding* :utf-8))
+
 (defmacro redirecting-stdout-to-stderr (&body body)
   (let ((verror  (gensym))
         (voutput (gensym)))
@@ -86,14 +92,14 @@
   (octets-to-string (string-to-octets string :encoding :iso-8859-1) :encoding :utf-8))

 (defun get-resource (url)
-  (multiple-value-bind (value status) (http-request url :connection-timeout 10)
-
+  (multiple-value-bind (value status)
+      (let ((*drakma-default-external-format* :utf-8))
+        (http-request url :connection-timeout 10))
     (values (when (= 200 status)
               (find-if (lambda (entity) (and (listp entity) (eq :html (html-tag entity))))
                        (parse-html-string value)))
             status)))

-(declaim (function remove-comments)) ; duh
 (defun remove-comments (entity)
   (cond
     ((atom entity) entity)
@@ -227,17 +233,12 @@
       (multiple-value-bind (author-name author-email) (split-email author)
         (let ((content
                 (with-output-to-string (out)
-                  (write-escaping '((#\& . "&")
-                                    (#\< . "&lt;")
-                                    (#\> . "&gt;")
-                                    (#\" . "&quot;"))
-                                  (with-output-to-string (out)
                                     (unparse-html
                                      (remove-comments
                                       `(:div (:class "blog")
                                          (:div (:class "header")
                                            (:img (:src ,image-url :height "100px" :class "floatRight"))
-                                           (:h1 () ,title)
+                                           (:h1 () (:a (:href ,link) ,title))
                                            (:p () ,blog-desc)
                                            (:p () (:small ()
                                                     (:a (:href ,(format nil "mailto:~A" author-email))
@@ -245,7 +246,14 @@
                                            (:p () (:small () ,keywords)))
                                          ,document))
                                      out))
-                                  out))))
+                ;; (with-output-to-string (out)
+                ;;   (write-escaping '((#\& . "&amp;")
+                ;;                     (#\< . "&lt;")
+                ;;                     (#\> . "&gt;")
+                ;;                     (#\" . "&quot;"))
+                ;;
+                ;;                   out))
+                ))
           (ecase version
             ((2)
              `("item" ()
@@ -263,12 +271,12 @@
              `("entry" nil
                       ("id"        () ,guid)
                       ("published" () ,(rfc822-to-iso8601 pubDate))
-                      ("updated"   () (iso8601-date))
+                      ("updated"   () ,(iso8601-date))
                       ("title"   (("type" "text")) ,title)
                       ("content" (("type" "html")) ,content)
                       ("link" (("rel" "self")
                               ("type" "application/atom+xml")
-                              ("href" ,link)))
+                               ("href" ,link)))
                       ("author" ()
                                ("name" () ,author-name)
                                ("email" () ,author-email))))))))))
@@ -330,22 +338,25 @@
                             ,@(mapcar (lambda (item) (full-item item version)) items))))

         ((1)
-         `(:feed (("xmlns" "http://www.w3.org/2005/Atom")
-                  ("xmlns:openSearch" "http://a9.com/-/spec/opensearchrss/1.0/")
-                  ("xmlns:blogger" "http://schemas.google.com/blogger/2008")
-                  ("xmlns:georss" "http://www.georss.org/georss")
-                  ("xmlns:gd" "http://schemas.google.com/g/2005")
-                  ("xmlns:thr" "http://purl.org/syndication/thread/1.0"))
-                 (:updated   () ,(rfc822-date))
-                 (:category  (("term" ,category)))
-                 (:title     (("type" "text")) ,title)
-                 (:link      (("href" ,link)
-                              ("type" "application/atom+xml")
-                              ("rel" "self")))
-                 (:author    ()
-                             (:name () ,author-name)
-                             (:email () ,author-email))
-                 ,@(mapcar (lambda (item) (full-item item version)) items)))))))
+         `("feed" (("xmlns" "http://www.w3.org/2005/Atom")
+                   ("xmlns:openSearch" "http://a9.com/-/spec/opensearchrss/1.0/")
+                   ("xmlns:blogger" "http://schemas.google.com/blogger/2008")
+                   ("xmlns:georss" "http://www.georss.org/georss")
+                   ("xmlns:gd" "http://schemas.google.com/g/2005")
+                   ("xmlns:thr" "http://purl.org/syndication/thread/1.0"))
+                  ("updated" () ,(rfc822-date))
+                  ("category"  (("term" ,category)))
+                  ("title"     (("type" "text")) ,title)
+                  ("link"      (("href" ,link)
+                               ("type" "application/atom+xml")
+                               ("rel" "self")))
+                  ("author"    ()
+                              ("name" () ,author-name)
+                              ("email" () ,author-email))
+                  ("openSearch:totalResults" () ,(prin1-to-string (length items)))
+                  ("openSearch:itemsPerPage" () ,(prin1-to-string (length items)))
+                  ("openSearch:startIndex" () "1")
+                  ,@(mapcar (lambda (item) (full-item item version)) items)))))))

 (defun fullfeed (input output)
   (let* ((feed           (parse input))
@@ -365,7 +376,8 @@
   (main ext:*args*)
   (ext:exit 0))

-(setf *default-pathname-defaults* #P"/Users/pjb/public_html/sites/com.informatimago.www/blog/")
+#+testing-script (setf *default-pathname-defaults* #P"/Users/pjb/public_html/sites/com.informatimago.www/blog/")
+
 (with-open-file (input "feed.xml")
   (with-open-file (output "fullfeed.xml"
                           :direction :output
diff --git a/com.informatimago.www/blog/fullfeed.xml b/com.informatimago.www/blog/fullfeed.xml
index df121de..df7ba7b 100644
--- a/com.informatimago.www/blog/fullfeed.xml
+++ b/com.informatimago.www/blog/fullfeed.xml
@@ -1,139 +1,139 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css" ?>
-<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"><updated>Sun, 25 Oct 2015 23:40:36 +0100</updated><category term="Programming"/><title type="text">Informatimago</title><link href="http://www.informatimago.com/blog" type="application/atom+xml" rel="self"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/clext/pipe-article-en.html</id><published>2015-10-04T16:45:27+0100</published><updated><iso8601-date/></updated><title type="text">Stream Pipe</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/pipe.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Stream Pipe&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A package implementing a unidirectional pipe using &amp;quot;BORDEAUX-THREADS&amp;quot; and &amp;quot;TRIVIAL-GRAY-STREAM&amp;quot;.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;common lisp,lisp,stream,pipe,gray streams,bordeaux-threads&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;stream-pipe&amp;quot;&amp;gt;
-&amp;lt;h1 class=&amp;quot;title&amp;quot;&amp;gt;Stream Pipe&amp;lt;/h1&amp;gt;
-
-
-
-
-&amp;lt;p&amp;gt;&amp;#226;&amp;#157;&amp;#161;&amp;lt;/p&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;id1&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;Stream Pipe&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Here is a new package, &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;amp;quot;COM.INFORMATIMAGO.CLEXT.PIPE&amp;amp;quot;&amp;lt;/tt&amp;gt; that implements
-a unidirectional pipe using &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;&amp;amp;quot;BORDEAUX-THREADS&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;&amp;amp;quot;TRIVIAL-GRAY-STREAM&amp;amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;The data written to the &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;PIPE-OUTPUT-STREAM&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; is queued (if a maximum
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"><updated>Mon, 26 Oct 2015 00:27:48 +0100</updated><category term="Programming"/><title type="text">Informatimago</title><link href="http://www.informatimago.com/blog" type="application/atom+xml" rel="self"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author><openSearch:totalResults>20</openSearch:totalResults><openSearch:itemsPerPage>20</openSearch:itemsPerPage><openSearch:startIndex>1</openSearch:startIndex><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/clext/pipe-article-en.html</id><published>2015-10-04T16:45:27+0100</published><updated>2015-10-26T00:27:48+0100</updated><title type="text">Stream Pipe</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/pipe.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/clext/pipe-article-en.html&quot;&gt;Stream Pipe&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A package implementing a unidirectional pipe using &quot;BORDEAUX-THREADS&quot; and &quot;TRIVIAL-GRAY-STREAM&quot;.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;common lisp,lisp,stream,pipe,gray streams,bordeaux-threads&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;stream-pipe&quot;&gt;
+&lt;h1 class=&quot;title&quot;&gt;Stream Pipe&lt;/h1&gt;
+
+
+
+
+&lt;p&gt;❡&lt;/p&gt;
+&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
+&lt;h1&gt;Stream Pipe&lt;/h1&gt;
+&lt;p&gt;Here is a new package, &lt;tt class=&quot;docutils literal&quot;&gt;&amp;quot;COM.INFORMATIMAGO.CLEXT.PIPE&amp;quot;&lt;/tt&gt; that implements
+a unidirectional pipe using &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;&amp;quot;BORDEAUX-THREADS&amp;quot;&lt;/span&gt;&lt;/tt&gt; and &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;&amp;quot;TRIVIAL-GRAY-STREAM&amp;quot;&lt;/span&gt;&lt;/tt&gt;.&lt;/p&gt;
+&lt;p&gt;The data written to the &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;PIPE-OUTPUT-STREAM&lt;/span&gt;&lt;/tt&gt; is queued (if a maximum
 queue-size is specified for the stream, then the writing
-thread may block if the buffer is full).&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;The data queued can be read from the &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;PIPE-INPUT-STREAM&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;.  If the
+thread may block if the buffer is full).&lt;/p&gt;
+&lt;p&gt;The data queued can be read from the &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;PIPE-INPUT-STREAM&lt;/span&gt;&lt;/tt&gt;.  If the
 queue is empty, then the reading stream may block (unless it
-used &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;LISTEN&amp;lt;/tt&amp;gt;, &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;READ-CHAR-NO-HANG&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;, etc).&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;When the stream is closed, one can still read from it until
-the end of file is reached.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Multiple threads may read or write to the same pipe.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;To demonstrate the use of pipes, the &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;amp;quot;COM.INFORMATIMAGO.CLEXT.FILTER&amp;amp;quot;&amp;lt;/tt&amp;gt;
-package exports a GREP function that processes &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;*STANDARD-INPUT*&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; and
-writes to &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;*STANDARD-OUTPUT*&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;, and a FILTER macro that builds a pipe
+used &lt;tt class=&quot;docutils literal&quot;&gt;LISTEN&lt;/tt&gt;, &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;READ-CHAR-NO-HANG&lt;/span&gt;&lt;/tt&gt;, etc).&lt;/p&gt;
+&lt;p&gt;When the stream is closed, one can still read from it until
+the end of file is reached.&lt;/p&gt;
+&lt;p&gt;Multiple threads may read or write to the same pipe.&lt;/p&gt;
+&lt;p&gt;To demonstrate the use of pipes, the &lt;tt class=&quot;docutils literal&quot;&gt;&amp;quot;COM.INFORMATIMAGO.CLEXT.FILTER&amp;quot;&lt;/tt&gt;
+package exports a GREP function that processes &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;*STANDARD-INPUT*&lt;/span&gt;&lt;/tt&gt; and
+writes to &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;*STANDARD-OUTPUT*&lt;/span&gt;&lt;/tt&gt;, and a FILTER macro that builds a pipe
 chain of any number of forms, each running in its own thread (but the
-last one which runs in the calling thread).&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;It also provides a function IN that reads a text file and writes it to
-&amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;*STANDARD-OUTPUT*&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;, and a function OUT that reads &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;*STANDARD-INPUT*&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; and
-writes it to a file. (They correspond to the unix redirections &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/tt&amp;gt; &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt;
-and &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt;).&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;COM.INFORMATIAMGO.COMMON-LISP.INTERACTIVE.BROWSER:MORE&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;CAT&amp;lt;/tt&amp;gt;
-have been updated to read from &amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;*STANDARD-INPUT*&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; when no file is
-given, thus working as filters.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-user1&amp;amp;gt; (pprint (macroexpand-1 &#039;(filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;)
-                                       (grep &amp;amp;quot;LISP&amp;amp;quot; :line-number t)
-                                       (out &amp;amp;quot;/tmp/wl.txt&amp;amp;quot;))))
+last one which runs in the calling thread).&lt;/p&gt;
+&lt;p&gt;It also provides a function IN that reads a text file and writes it to
+&lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;*STANDARD-OUTPUT*&lt;/span&gt;&lt;/tt&gt;, and a function OUT that reads &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;*STANDARD-INPUT*&lt;/span&gt;&lt;/tt&gt; and
+writes it to a file. (They correspond to the unix redirections &lt;tt class=&quot;docutils literal&quot;&gt;&amp;lt;&lt;/tt&gt; &lt;tt class=&quot;docutils literal&quot;&gt;&amp;gt;&lt;/tt&gt;
+and &lt;tt class=&quot;docutils literal&quot;&gt;&amp;gt;&amp;gt;&lt;/tt&gt;).&lt;/p&gt;
+&lt;p&gt;&lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;COM.INFORMATIAMGO.COMMON-LISP.INTERACTIVE.BROWSER:MORE&lt;/span&gt;&lt;/tt&gt; and &lt;tt class=&quot;docutils literal&quot;&gt;CAT&lt;/tt&gt;
+have been updated to read from &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;*STANDARD-INPUT*&lt;/span&gt;&lt;/tt&gt; when no file is
+given, thus working as filters.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+user1&amp;gt; (pprint (macroexpand-1 &#039;(filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;)
+                                       (grep &amp;quot;LISP&amp;quot; :line-number t)
+                                       (out &amp;quot;/tmp/wl.txt&amp;quot;))))

 (let ((#1=#:|pipe77885| (com.informatimago.clext.pipe:make-pipe
                          :buffer-size com.informatimago.clext.filter::*buffer-size*)))
   (bordeaux-threads:make-thread
    (lambda nil
      (unwind-protect
-          (filter (in #P&amp;amp;quot;/Users/pjb/tmp/misc/wang&amp;amp;quot;) (grep &amp;amp;quot;LISP&amp;amp;quot; :line-number t))
+          (filter (in #P&amp;quot;/Users/pjb/tmp/misc/wang&amp;quot;) (grep &amp;quot;LISP&amp;quot; :line-number t))
        (close *standard-output*)))
    :initial-bindings
    (list (cons &#039;*standard-output* (com.informatimago.clext.pipe:pipe-output-stream #1#))
          (cons &#039;*standard-input* *standard-input*)))
   (let ((*standard-input* (com.informatimago.clext.pipe:pipe-input-stream #1#)))
-    (out &amp;amp;quot;/tmp/wl.txt&amp;amp;quot;)))
+    (out &amp;quot;/tmp/wl.txt&amp;quot;)))

 ; No value
-user1&amp;amp;gt;
-&amp;lt;/pre&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;example&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Example&amp;lt;/h2&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-cl-user&amp;amp;gt; (mkupack :use &#039;(&amp;amp;quot;COMMON-LISP&amp;amp;quot;
-                         &amp;amp;quot;COM.INFORMATIMAGO.COMMON-LISP.INTERACTIVE.BROWSER&amp;amp;quot;
-                         &amp;amp;quot;COM.INFORMATIMAGO.CLEXT.FILTER&amp;amp;quot;))
-#&amp;amp;lt;Package &amp;amp;quot;USER1&amp;amp;quot;&amp;amp;gt;
-user1&amp;amp;gt; (filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;))
+user1&amp;gt;
+&lt;/pre&gt;
+&lt;div class=&quot;section&quot; id=&quot;example&quot;&gt;
+&lt;h2&gt;Example&lt;/h2&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+cl-user&amp;gt; (mkupack :use &#039;(&amp;quot;COMMON-LISP&amp;quot;
+                         &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.INTERACTIVE.BROWSER&amp;quot;
+                         &amp;quot;COM.INFORMATIMAGO.CLEXT.FILTER&amp;quot;))
+#&amp;lt;Package &amp;quot;USER1&amp;quot;&amp;gt;
+user1&amp;gt; (filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;))
 Hao Wang, logicien americain.

 L&#039;algorithme en  question  a  ete  publie  en  1960  dans l&#039;IBM Journal,
-article intitule &amp;amp;quot;Toward  Mechanical Mathematics&amp;amp;quot;, avec des variantes et
-une  extension au calcul  des  predicats.  Il  s&#039;agit  ici  du  &amp;amp;quot;premier
-programme&amp;amp;quot; de Wang, systeme &amp;amp;quot;P&amp;amp;quot;.
+article intitule &amp;quot;Toward  Mechanical Mathematics&amp;quot;, avec des variantes et
+une  extension au calcul  des  predicats.  Il  s&#039;agit  ici  du  &amp;quot;premier
+programme&amp;quot; de Wang, systeme &amp;quot;P&amp;quot;.

 L&#039;article a ete ecrit en 1958, et les experiences effectuees sur IBM 704
 - machine a lampes, 32 k  mots  de 36 bits, celle-la meme qui vit naitre
 LISP a la meme epoque. Le programme  a  ete ecrit en assembleur (Fortran
 existait, mais il ne s&#039;etait pas encore impose)  et  l&#039;auteur estime que
-&amp;amp;quot;there is very little in the program that is not straightforward&amp;amp;quot;.
+&amp;quot;there is very little in the program that is not straightforward&amp;quot;.

-Il observe que les preuves engendrees sont &amp;amp;quot;essentiellement des arbres&amp;amp;quot;,
+Il observe que les preuves engendrees sont &amp;quot;essentiellement des arbres&amp;quot;,
 et  annonce  que  la  machine  a  demontre 220 theoremes du  calcul  des
 propositions  (tautologies)  en  3  minutes. Il en tire argument pour la
 superiorite  d&#039;une  approche  algorithmique  par  rapport a une approche
-heuristique comme celle du &amp;amp;quot;Logic Theorist&amp;amp;quot; de Newell, Shaw et  Simon (a
+heuristique comme celle du &amp;quot;Logic Theorist&amp;quot; de Newell, Shaw et  Simon (a
 partir de 1956 sur la machine JOHNNIAC de la Rand Corporation): un debat
 qui dure encore...

 Cet  algorithme  a  ete popularise par J. McCarthy, comme exemple-fanion
 d&#039;application  de LISP. Il figure dans le manuel de la premiere  version
 de  LISP  (LISP  1,  sur IBM 704 justement, le manuel est date  de  Mars
-1960), et il a ete repris dans le celebre &amp;amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;amp;quot;
+1960), et il a ete repris dans le celebre &amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;quot;
 publie en 1962 par MIT Press, un des maitres-livres de l&#039;Informatique.



 nil
-user1&amp;amp;gt; (filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;) (grep &amp;amp;quot;LISP&amp;amp;quot;))
+user1&amp;gt; (filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;) (grep &amp;quot;LISP&amp;quot;))
 LISP a la meme epoque. Le programme  a  ete ecrit en assembleur (Fortran
 d&#039;application  de LISP. Il figure dans le manuel de la premiere  version
 de  LISP  (LISP  1,  sur IBM 704 justement, le manuel est date  de  Mars
-1960), et il a ete repris dans le celebre &amp;amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;amp;quot;
+1960), et il a ete repris dans le celebre &amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;quot;
 nil
-user1&amp;amp;gt; (filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;) (grep &amp;amp;quot;program&amp;amp;quot; :case-insensitive t))
-programme&amp;amp;quot; de Wang, systeme &amp;amp;quot;P&amp;amp;quot;.
+user1&amp;gt; (filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;) (grep &amp;quot;program&amp;quot; :case-insensitive t))
+programme&amp;quot; de Wang, systeme &amp;quot;P&amp;quot;.
 LISP a la meme epoque. Le programme  a  ete ecrit en assembleur (Fortran
-&amp;amp;quot;there is very little in the program that is not straightforward&amp;amp;quot;.
-1960), et il a ete repris dans le celebre &amp;amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;amp;quot;
+&amp;quot;there is very little in the program that is not straightforward&amp;quot;.
+1960), et il a ete repris dans le celebre &amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;quot;
 nil
-user1&amp;amp;gt; (filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;)
-               (grep &amp;amp;quot; &amp;amp;quot; :line-number t)
+user1&amp;gt; (filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;)
+               (grep &amp;quot; &amp;quot; :line-number t)
                (let ((*terminal-height* 7)) (more)))
 1:Hao Wang, logicien americain.
 2:
 3:L&#039;algorithme en  question  a  ete  publie  en  1960  dans l&#039;IBM Journal,
-4:article intitule &amp;amp;quot;Toward  Mechanical Mathematics&amp;amp;quot;, avec des variantes et
-5:une  extension au calcul  des  predicats.  Il  s&#039;agit  ici  du  &amp;amp;quot;premier
-6:programme&amp;amp;quot; de Wang, systeme &amp;amp;quot;P&amp;amp;quot;.
+4:article intitule &amp;quot;Toward  Mechanical Mathematics&amp;quot;, avec des variantes et
+5:une  extension au calcul  des  predicats.  Il  s&#039;agit  ici  du  &amp;quot;premier
+6:programme&amp;quot; de Wang, systeme &amp;quot;P&amp;quot;.
 7:
 8:L&#039;article a ete ecrit en 1958, et les experiences effectuees sur IBM 704
 Type RETURN for next page:
 9:- machine a lampes, 32 k  mots  de 36 bits, celle-la meme qui vit naitre
 10:LISP a la meme epoque. Le programme  a  ete ecrit en assembleur (Fortran
 11:existait, mais il ne s&#039;etait pas encore impose)  et  l&#039;auteur estime que
-12:&amp;amp;quot;there is very little in the program that is not straightforward&amp;amp;quot;.
+12:&amp;quot;there is very little in the program that is not straightforward&amp;quot;.
 13:
-14:Il observe que les preuves engendrees sont &amp;amp;quot;essentiellement des arbres&amp;amp;quot;,
+14:Il observe que les preuves engendrees sont &amp;quot;essentiellement des arbres&amp;quot;,
 15:et  annonce  que  la  machine  a  demontre 220 theoremes du  calcul  des
 Type RETURN for next page:
 16:propositions  (tautologies)  en  3  minutes. Il en tire argument pour la
 17:superiorite  d&#039;une  approche  algorithmique  par  rapport a une approche
-18:heuristique comme celle du &amp;amp;quot;Logic Theorist&amp;amp;quot; de Newell, Shaw et  Simon (a
+18:heuristique comme celle du &amp;quot;Logic Theorist&amp;quot; de Newell, Shaw et  Simon (a
 19:partir de 1956 sur la machine JOHNNIAC de la Rand Corporation): un debat
 20:qui dure encore...
 21:
@@ -141,7 +141,7 @@ Type RETURN for next page:
 Type RETURN for next page:
 23:d&#039;application  de LISP. Il figure dans le manuel de la premiere  version
 24:de  LISP  (LISP  1,  sur IBM 704 justement, le manuel est date  de  Mars
-25:1960), et il a ete repris dans le celebre &amp;amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;amp;quot;
+25:1960), et il a ete repris dans le celebre &amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;quot;
 26:publie en 1962 par MIT Press, un des maitres-livres de l&#039;Informatique.
 27:
 28:
@@ -149,303 +149,303 @@ Type RETURN for next page:
 Type RETURN for next page:

 ; No value
-user1&amp;amp;gt; (filter (in #P&amp;amp;quot;~/tmp/misc/wang&amp;amp;quot;) (grep &amp;amp;quot;LISP&amp;amp;quot; :line-number t) (out &amp;amp;quot;/tmp/wl.txt&amp;amp;quot;))
+user1&amp;gt; (filter (in #P&amp;quot;~/tmp/misc/wang&amp;quot;) (grep &amp;quot;LISP&amp;quot; :line-number t) (out &amp;quot;/tmp/wl.txt&amp;quot;))
 nil
-user1&amp;amp;gt; (cat &amp;amp;quot;/tmp/wl.txt&amp;amp;quot;)
+user1&amp;gt; (cat &amp;quot;/tmp/wl.txt&amp;quot;)
 10:LISP a la meme epoque. Le programme  a  ete ecrit en assembleur (Fortran
 23:d&#039;application  de LISP. Il figure dans le manuel de la premiere  version
 24:de  LISP  (LISP  1,  sur IBM 704 justement, le manuel est date  de  Mars
-25:1960), et il a ete repris dans le celebre &amp;amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;amp;quot;
+25:1960), et il a ete repris dans le celebre &amp;quot;LISP 1.5 Programmer&#039;s Manual&amp;quot;
 ; No value
-user1&amp;amp;gt;
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;sources&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Sources&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;These new packages are available on gitlab and github; and they&#039;ll be
-distributed in &amp;lt;cite&amp;gt;quicklisp&amp;lt;/cite&amp;gt;.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+user1&amp;gt;
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;sources&quot;&gt;
+&lt;h2&gt;Sources&lt;/h2&gt;
+&lt;p&gt;These new packages are available on gitlab and github; and they&#039;ll be
+distributed in &lt;cite&gt;quicklisp&lt;/cite&gt;.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 git clone https://gitlab.com/com-informatimago/com-informatimago.git informatimago
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;a class=&amp;quot;reference external&amp;quot; href=&amp;quot;http://www.informatimago.com/develop/lisp/index.html&amp;quot;&amp;gt;Informatimago Public Common Lisp Libraries&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/clext/pipe-article-en.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/botihn/botihn-fr.html</id><published>2015-04-27T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Botihn: un simple robot IRC pour surveiller Hacker News (FR)</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/botihn.png&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Botihn: un simple robot IRC pour surveiller Hacker News (FR)&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;&amp;#201;criture d&#039;un robot IRC simple.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;common lisp,lisp,irc,bot,hacker news,drakma,cl-json,cl-irc,cesarum&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;ecriture-d-un-robot-irc-simple&amp;quot;&amp;gt;
-&amp;lt;h1 class=&amp;quot;title&amp;quot;&amp;gt;&amp;#195;&amp;#137;criture d&#039;un robot IRC simple&amp;lt;/h1&amp;gt;
-
-
-
-
-&amp;lt;p&amp;gt;&amp;#226;&amp;#157;&amp;#161;&amp;lt;/p&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;id1&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;&amp;#195;&amp;#137;criture d&#039;un robot IRC simple&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Pour soulager notre d&amp;#195;&amp;#169;pendence &amp;#195;&amp;#160; &amp;lt;em&amp;gt;Hacker News&amp;lt;/em&amp;gt;
-(&amp;lt;a class=&amp;quot;reference external&amp;quot; href=&amp;quot;http://news.ycombinator.com/newest&amp;quot;&amp;gt;http://news.ycombinator.com/newest&amp;lt;/a&amp;gt;), qui nous incite &amp;#195;&amp;#160; cliquer sur
-&amp;lt;em&amp;gt;Reload&amp;lt;/em&amp;gt; toutes les dix secondes, on va &amp;#195;&amp;#169;crire un &amp;lt;cite&amp;gt;ircbot&amp;lt;/cite&amp;gt;, un petit
-programme qui va aller chercher p&amp;#195;&amp;#169;riodiquement les nouveaux articles
-sur &amp;lt;em&amp;gt;Hacker News&amp;lt;/em&amp;gt;, et en transmettre le titre et l&#039;&amp;lt;cite&amp;gt;URL&amp;lt;/cite&amp;gt; sur un canal &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;.&amp;lt;/p&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;dependences-systeme-asdf&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Dependences - Syst&amp;#195;&amp;#168;me &amp;lt;cite&amp;gt;ASDF&amp;lt;/cite&amp;gt;&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;Ce programme est &amp;#195;&amp;#169;crit en &amp;lt;cite&amp;gt;Common Lisp&amp;lt;/cite&amp;gt; (cf. &amp;lt;a class=&amp;quot;reference external&amp;quot; href=&amp;quot;http://cliki.net/&amp;quot;&amp;gt;http://cliki.net/&amp;lt;/a&amp;gt;), en
-utilisant quelques biblioth&amp;#195;&amp;#168;ques:&amp;lt;/p&amp;gt;
-&amp;lt;ul class=&amp;quot;simple&amp;quot;&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;em&amp;gt;drakma&amp;lt;/em&amp;gt;, client &amp;lt;cite&amp;gt;HTTP&amp;lt;/cite&amp;gt;, va nous permettre d&#039;obtenir les donn&amp;#195;&amp;#169;es voulues;&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;em&amp;gt;cl-json&amp;lt;/em&amp;gt; va nous permettre de d&amp;#195;&amp;#169;coder ces donn&amp;#195;&amp;#169;es au format &amp;lt;cite&amp;gt;JSON&amp;lt;/cite&amp;gt;,
-et d&#039;obtenir des structures Lisp;&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;em&amp;gt;cl-irc&amp;lt;/em&amp;gt; va nous permettre de communiquer avec le serveur &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;.&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;je vais aussi utiliser une fonctions de ma biblioth&amp;#195;&amp;#168;que
-&amp;lt;em&amp;gt;com.informatimago.common-lisp.cesarum&amp;lt;/em&amp;gt;.&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
-&amp;lt;p&amp;gt;Ces biblioth&amp;#195;&amp;#168;ques sont obtenues, install&amp;#195;&amp;#169;es et compil&amp;#195;&amp;#169;es avec
-&amp;lt;em&amp;gt;quicklisp&amp;lt;/em&amp;gt; et &amp;lt;em&amp;gt;asdf&amp;lt;/em&amp;gt;.  Nous allons donc commencer par &amp;#195;&amp;#169;crire un
-syst&amp;#195;&amp;#168;me ASDF indiquant les d&amp;#195;&amp;#169;pendences de notre programme &amp;lt;cite&amp;gt;botihn&amp;lt;/cite&amp;gt; sur
-ces biblioth&amp;#195;&amp;#168;ques &amp;lt;cite&amp;gt;com.informatimago.small-cl-pgms.botihn.asd&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(asdf:defsystem &amp;amp;quot;com.informatimago.small-cl-pgms.botihn&amp;amp;quot;
-    :description &amp;amp;quot;An IRC bot monitoring Hacker News.&amp;amp;quot;
-    :author &amp;amp;quot;Pascal J. Bourguignon&amp;amp;quot;
-    :version &amp;amp;quot;1.0.0&amp;amp;quot;
-    :license &amp;amp;quot;AGPL3&amp;amp;quot;
-    :depends-on (&amp;amp;quot;com.informatimago.common-lisp.cesarum&amp;amp;quot;
-                 &amp;amp;quot;cl-irc&amp;amp;quot; &amp;amp;quot;cl-json&amp;amp;quot; &amp;amp;quot;drakma&amp;amp;quot;)
-    :components ((:file &amp;amp;quot;botihn&amp;amp;quot;)))
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;paquetage&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Paquetage&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;Nous pouvons alors commencer &amp;#195;&amp;#160; programmer notre robot.  D&amp;#195;&amp;#169;finissons
+&lt;/pre&gt;
+&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://www.informatimago.com/develop/lisp/index.html&quot;&gt;Informatimago Public Common Lisp Libraries&lt;/a&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/clext/pipe-article-en.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/botihn/botihn-fr.html</id><published>2015-04-27T12:00:00+0100</published><updated>2015-10-26T00:27:48+0100</updated><title type="text">Botihn: un simple robot IRC pour surveiller Hacker News (FR)</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/botihn.png&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/botihn/botihn-fr.html&quot;&gt;Botihn: un simple robot IRC pour surveiller Hacker News (FR)&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Écriture d&#039;un robot IRC simple.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;common lisp,lisp,irc,bot,hacker news,drakma,cl-json,cl-irc,cesarum&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;ecriture-d-un-robot-irc-simple&quot;&gt;
+&lt;h1 class=&quot;title&quot;&gt;Écriture d&#039;un robot IRC simple&lt;/h1&gt;
+
+
+
+
+&lt;p&gt;❡&lt;/p&gt;
+&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
+&lt;h1&gt;Écriture d&#039;un robot IRC simple&lt;/h1&gt;
+&lt;p&gt;Pour soulager notre dépendence à &lt;em&gt;Hacker News&lt;/em&gt;
+(&lt;a class=&quot;reference external&quot; href=&quot;http://news.ycombinator.com/newest&quot;&gt;http://news.ycombinator.com/newest&lt;/a&gt;), qui nous incite à cliquer sur
+&lt;em&gt;Reload&lt;/em&gt; toutes les dix secondes, on va écrire un &lt;cite&gt;ircbot&lt;/cite&gt;, un petit
+programme qui va aller chercher périodiquement les nouveaux articles
+sur &lt;em&gt;Hacker News&lt;/em&gt;, et en transmettre le titre et l&#039;&lt;cite&gt;URL&lt;/cite&gt; sur un canal &lt;cite&gt;IRC&lt;/cite&gt;.&lt;/p&gt;
+&lt;div class=&quot;section&quot; id=&quot;dependences-systeme-asdf&quot;&gt;
+&lt;h2&gt;Dependences - Système &lt;cite&gt;ASDF&lt;/cite&gt;&lt;/h2&gt;
+&lt;p&gt;Ce programme est écrit en &lt;cite&gt;Common Lisp&lt;/cite&gt; (cf. &lt;a class=&quot;reference external&quot; href=&quot;http://cliki.net/&quot;&gt;http://cliki.net/&lt;/a&gt;), en
+utilisant quelques bibliothèques:&lt;/p&gt;
+&lt;ul class=&quot;simple&quot;&gt;
+&lt;li&gt;&lt;em&gt;drakma&lt;/em&gt;, client &lt;cite&gt;HTTP&lt;/cite&gt;, va nous permettre d&#039;obtenir les données voulues;&lt;/li&gt;
+&lt;li&gt;&lt;em&gt;cl-json&lt;/em&gt; va nous permettre de décoder ces données au format &lt;cite&gt;JSON&lt;/cite&gt;,
+et d&#039;obtenir des structures Lisp;&lt;/li&gt;
+&lt;li&gt;&lt;em&gt;cl-irc&lt;/em&gt; va nous permettre de communiquer avec le serveur &lt;cite&gt;IRC&lt;/cite&gt;.&lt;/li&gt;
+&lt;li&gt;je vais aussi utiliser une fonctions de ma bibliothèque
+&lt;em&gt;com.informatimago.common-lisp.cesarum&lt;/em&gt;.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;Ces bibliothèques sont obtenues, installées et compilées avec
+&lt;em&gt;quicklisp&lt;/em&gt; et &lt;em&gt;asdf&lt;/em&gt;.  Nous allons donc commencer par écrire un
+système ASDF indiquant les dépendences de notre programme &lt;cite&gt;botihn&lt;/cite&gt; sur
+ces bibliothèques &lt;cite&gt;com.informatimago.small-cl-pgms.botihn.asd&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(asdf:defsystem &amp;quot;com.informatimago.small-cl-pgms.botihn&amp;quot;
+    :description &amp;quot;An IRC bot monitoring Hacker News.&amp;quot;
+    :author &amp;quot;Pascal J. Bourguignon&amp;quot;
+    :version &amp;quot;1.0.0&amp;quot;
+    :license &amp;quot;AGPL3&amp;quot;
+    :depends-on (&amp;quot;com.informatimago.common-lisp.cesarum&amp;quot;
+                 &amp;quot;cl-irc&amp;quot; &amp;quot;cl-json&amp;quot; &amp;quot;drakma&amp;quot;)
+    :components ((:file &amp;quot;botihn&amp;quot;)))
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;paquetage&quot;&gt;
+&lt;h2&gt;Paquetage&lt;/h2&gt;
+&lt;p&gt;Nous pouvons alors commencer à programmer notre robot.  Définissons
 d&#039;abord le paquetage lisp.  Comme ce sera un petit programme, nous
-mettrons tout le code dans un seul fichier, &amp;lt;cite&amp;gt;botihn.lisp&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(defpackage &amp;amp;quot;COM.INFORMATIMAGO.SMALL-CL-PGMS.BOTIHN&amp;amp;quot;
-  (:use &amp;amp;quot;COMMON-LISP&amp;amp;quot; &amp;amp;quot;CL-IRC&amp;amp;quot; &amp;amp;quot;CL-JSON&amp;amp;quot; &amp;amp;quot;DRAKMA&amp;amp;quot;
-        &amp;amp;quot;COM.INFORMATIMAGO.COMMON-LISP.CESARUM.LIST&amp;amp;quot;)
-  (:export &amp;amp;quot;MAIN&amp;amp;quot;))
-(in-package &amp;amp;quot;COM.INFORMATIMAGO.SMALL-CL-PGMS.BOTIHN&amp;amp;quot;)
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;obtenir-les-informations-d-hacker-news&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Obtenir les informations d&#039;&amp;lt;em&amp;gt;Hacker News&amp;lt;/em&amp;gt;&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;La premi&amp;#195;&amp;#168;re chose &amp;#195;&amp;#160; faire, est d&#039;obtenir les donn&amp;#195;&amp;#169;es.  Pour cel&amp;#195;&amp;#160;, nous
-consultons l&#039;&amp;lt;cite&amp;gt;API&amp;lt;/cite&amp;gt; indiqu&amp;#195;&amp;#169; en bas de la page d&#039;Hacker News,
-&amp;lt;a class=&amp;quot;reference external&amp;quot; href=&amp;quot;https://github.com/HackerNews/API&amp;quot;&amp;gt;https://github.com/HackerNews/API&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Nous allons utiliser l&#039;&amp;lt;cite&amp;gt;URL&amp;lt;/cite&amp;gt;:
-&amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;https://hacker-news.firebaseio.com/v0/newstories.json&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; pour obtenir
-les &amp;lt;cite&amp;gt;ID&amp;lt;/cite&amp;gt; des derni&amp;#195;&amp;#168;res nouvelles, et
-&amp;lt;tt class=&amp;quot;docutils literal&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pre&amp;quot;&amp;gt;https://hacker-news.firebaseio.com/v0/item/ID.json&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt; pour obtenir les
-informations sur une nouvelle identifi&amp;#195;&amp;#169;e par son ID.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Afin que les donn&amp;#195;&amp;#169;es envoy&amp;#195;&amp;#169;es par le serveur soient consid&amp;#195;&amp;#169;r&amp;#195;&amp;#169;es comme
+mettrons tout le code dans un seul fichier, &lt;cite&gt;botihn.lisp&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(defpackage &amp;quot;COM.INFORMATIMAGO.SMALL-CL-PGMS.BOTIHN&amp;quot;
+  (:use &amp;quot;COMMON-LISP&amp;quot; &amp;quot;CL-IRC&amp;quot; &amp;quot;CL-JSON&amp;quot; &amp;quot;DRAKMA&amp;quot;
+        &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.CESARUM.LIST&amp;quot;)
+  (:export &amp;quot;MAIN&amp;quot;))
+(in-package &amp;quot;COM.INFORMATIMAGO.SMALL-CL-PGMS.BOTIHN&amp;quot;)
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;obtenir-les-informations-d-hacker-news&quot;&gt;
+&lt;h2&gt;Obtenir les informations d&#039;&lt;em&gt;Hacker News&lt;/em&gt;&lt;/h2&gt;
+&lt;p&gt;La première chose à faire, est d&#039;obtenir les données.  Pour celà, nous
+consultons l&#039;&lt;cite&gt;API&lt;/cite&gt; indiqué en bas de la page d&#039;Hacker News,
+&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/HackerNews/API&quot;&gt;https://github.com/HackerNews/API&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;Nous allons utiliser l&#039;&lt;cite&gt;URL&lt;/cite&gt;:
+&lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;https://hacker-news.firebaseio.com/v0/newstories.json&lt;/span&gt;&lt;/tt&gt; pour obtenir
+les &lt;cite&gt;ID&lt;/cite&gt; des dernières nouvelles, et
+&lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;https://hacker-news.firebaseio.com/v0/item/ID.json&lt;/span&gt;&lt;/tt&gt; pour obtenir les
+informations sur une nouvelle identifiée par son ID.&lt;/p&gt;
+&lt;p&gt;Afin que les données envoyées par le serveur soient considérées comme
 du texte par drakma, nous devrons lui indiquer que c&#039;est le cas pour
-un &amp;lt;cite&amp;gt;Content-Type&amp;lt;/cite&amp;gt; &amp;lt;cite&amp;gt;application/json&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(push &#039;(&amp;amp;quot;application&amp;amp;quot; . &amp;amp;quot;json&amp;amp;quot;) *text-content-types*)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;cite&amp;gt;DRAKMA:HTTP-REQUEST&amp;lt;/cite&amp;gt; retourne plusieurs valeurs; la premi&amp;#195;&amp;#168;re est la
-resource obtenue; la deuxi&amp;#195;&amp;#168;me est le code status.  Nous ignorerons les
-autres valeurs.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(http-request &amp;amp;quot;https://hacker-news.firebaseio.com/v0/newstories.json&amp;amp;quot;)
---&amp;amp;gt; &amp;amp;quot;[9446519,9446509,9446505,&amp;#226;&amp;#128;&amp;#166;,9443212]&amp;amp;quot;
+un &lt;cite&gt;Content-Type&lt;/cite&gt; &lt;cite&gt;application/json&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(push &#039;(&amp;quot;application&amp;quot; . &amp;quot;json&amp;quot;) *text-content-types*)
+&lt;/pre&gt;
+&lt;p&gt;&lt;cite&gt;DRAKMA:HTTP-REQUEST&lt;/cite&gt; retourne plusieurs valeurs; la première est la
+resource obtenue; la deuxième est le code status.  Nous ignorerons les
+autres valeurs.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(http-request &amp;quot;https://hacker-news.firebaseio.com/v0/newstories.json&amp;quot;)
+--&amp;gt; &amp;quot;[9446519,9446509,9446505,…,9443212]&amp;quot;
     200
-    ((:content-length . &amp;amp;quot;4001&amp;amp;quot;)
-     (:strict-transport-security . &amp;amp;quot;max-age=31556926; includeSubDomains; preload&amp;amp;quot;)
-     (:content-type . &amp;amp;quot;application/json; charset=utf-8&amp;amp;quot;)
-     (:cache-control . &amp;amp;quot;no-cache&amp;amp;quot;))
-    #&amp;amp;lt;uri https://hacker-news.firebaseio.com/v0/newstories.json&amp;amp;gt;
-    #&amp;amp;lt;flexi-streams:flexi-io-stream #x302006213FED&amp;amp;gt;
+    ((:content-length . &amp;quot;4001&amp;quot;)
+     (:strict-transport-security . &amp;quot;max-age=31556926; includeSubDomains; preload&amp;quot;)
+     (:content-type . &amp;quot;application/json; charset=utf-8&amp;quot;)
+     (:cache-control . &amp;quot;no-cache&amp;quot;))
+    #&amp;lt;uri https://hacker-news.firebaseio.com/v0/newstories.json&amp;gt;
+    #&amp;lt;flexi-streams:flexi-io-stream #x302006213FED&amp;gt;
     t
-    &amp;amp;quot;OK&amp;amp;quot;
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Utilisons &amp;lt;cite&amp;gt;CL-JSON:DECODE-JSON-FROM-STRING&amp;lt;/cite&amp;gt; pour d&amp;#195;&amp;#169;coder le vecteur
-&amp;lt;cite&amp;gt;JSON&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+    &amp;quot;OK&amp;quot;
+&lt;/pre&gt;
+&lt;p&gt;Utilisons &lt;cite&gt;CL-JSON:DECODE-JSON-FROM-STRING&lt;/cite&gt; pour décoder le vecteur
+&lt;cite&gt;JSON&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun new-stories ()
   (multiple-value-bind (value status)
-       (http-request &amp;amp;quot;https://hacker-news.firebaseio.com/v0/newstories.json&amp;amp;quot;)
+       (http-request &amp;quot;https://hacker-news.firebaseio.com/v0/newstories.json&amp;quot;)
     (when (= 200 status)
       (decode-json-from-string value))))

 (subseq (new-stories) 0 8)
---&amp;amp;gt; (9446577 9446573 9446563 9446561 9446559 9446558 9446541 9446519)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;De fa&amp;#195;&amp;#167;on similaire, nous obtiendrons les informations sur une nouvelle
-identifi&amp;#195;&amp;#169;e :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+--&amp;gt; (9446577 9446573 9446563 9446561 9446559 9446558 9446541 9446519)
+&lt;/pre&gt;
+&lt;p&gt;De façon similaire, nous obtiendrons les informations sur une nouvelle
+identifiée :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun story (id)
   (multiple-value-bind (value status)
-      (http-request (format nil &amp;amp;quot;https://hacker-news.firebaseio.com/v0/item/~A.json&amp;amp;quot; id))
+      (http-request (format nil &amp;quot;https://hacker-news.firebaseio.com/v0/item/~A.json&amp;quot; id))
     (when (= 200 status)
       (decode-json-from-string value))))


 (story 9446577)
---&amp;amp;gt; ((:by . &amp;amp;quot;antjanus&amp;amp;quot;)
+--&amp;gt; ((:by . &amp;quot;antjanus&amp;quot;)
      (:descendants . 0)
      (:id . 9446577)
      (:score . 1)
-     (:text . &amp;amp;quot;&amp;amp;quot;)
+     (:text . &amp;quot;&amp;quot;)
      (:time . 1430145589)
-     (:title . &amp;amp;quot;Ask HN: Where do you look for a job? Why do you pick those places to apply?&amp;amp;quot;)
-     (:type . &amp;amp;quot;story&amp;amp;quot;)
-     (:url . &amp;amp;quot;&amp;amp;quot;))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Nous allons qu&amp;#195;&amp;#169;rir cette liste p&amp;#195;&amp;#169;riodiquement, et nous ne devons
+     (:title . &amp;quot;Ask HN: Where do you look for a job? Why do you pick those places to apply?&amp;quot;)
+     (:type . &amp;quot;story&amp;quot;)
+     (:url . &amp;quot;&amp;quot;))
+&lt;/pre&gt;
+&lt;p&gt;Nous allons quérir cette liste périodiquement, et nous ne devons
 afficher que les nouvelles nouvelles.  Nous conserverons
-l&#039;identification de la derni&amp;#195;&amp;#168;re nouvelle dans une variable globale
-&amp;lt;em&amp;gt;*LAST-STORY*&amp;lt;/em&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+l&#039;identification de la dernière nouvelle dans une variable globale
+&lt;em&gt;*LAST-STORY*&lt;/em&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defvar *last-story* nil)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Lorsque le programme d&amp;#195;&amp;#169;marre, &amp;lt;em&amp;gt;*LAST-STORY*&amp;lt;/em&amp;gt; sera &amp;lt;cite&amp;gt;NIL&amp;lt;/cite&amp;gt;, et alors
-nous n&#039;afficherons que la toute derni&amp;#195;&amp;#168;re nouvelle (tant pis pour les
-nouvelles manqu&amp;#195;&amp;#169;es pendant que le programme &amp;#195;&amp;#169;tait arr&amp;#195;&amp;#170;t&amp;#195;&amp;#169;).  Sinon,
+&lt;/pre&gt;
+&lt;p&gt;Lorsque le programme démarre, &lt;em&gt;*LAST-STORY*&lt;/em&gt; sera &lt;cite&gt;NIL&lt;/cite&gt;, et alors
+nous n&#039;afficherons que la toute dernière nouvelle (tant pis pour les
+nouvelles manquées pendant que le programme était arrêté).  Sinon,
 nous prenons toutes les nouvelles qui se trouvent dans la liste avant
-cette derni&amp;#195;&amp;#168;re nouvelle affich&amp;#195;&amp;#169;e, et nous renversons la liste pour
-l&#039;avoir dans l&#039;ordre chronologique.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+cette dernière nouvelle affichée, et nous renversons la liste pour
+l&#039;avoir dans l&#039;ordre chronologique.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun get-new-stories ()
   (let ((news (new-stories)))
     (if *last-story*
         (reverse (subseq news 0 (or (position *last-story* news) 1)))
         (list (first news)))))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Certaines de ces nouvelles n&#039;ont pas d&#039;&amp;lt;cite&amp;gt;URL&amp;lt;/cite&amp;gt;, mais contienent un texte
-sur leur page web sur &amp;lt;em&amp;gt;Hacker News&amp;lt;/em&amp;gt;.  Nous construisons l&#039;&amp;lt;cite&amp;gt;URL&amp;lt;/cite&amp;gt; de
-cette page avec la fonction suivante :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Certaines de ces nouvelles n&#039;ont pas d&#039;&lt;cite&gt;URL&lt;/cite&gt;, mais contienent un texte
+sur leur page web sur &lt;em&gt;Hacker News&lt;/em&gt;.  Nous construisons l&#039;&lt;cite&gt;URL&lt;/cite&gt; de
+cette page avec la fonction suivante :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun hn-url (story)
-  (format nil &amp;amp;quot;https://news.ycombinator.com/item?id=~A&amp;amp;quot; story))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Et formattons le message pour une nouvelle ainsi :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+  (format nil &amp;quot;https://news.ycombinator.com/item?id=~A&amp;quot; story))
+&lt;/pre&gt;
+&lt;p&gt;Et formattons le message pour une nouvelle ainsi :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun format-story (story)
   (let ((title  (aget story :title))
         (url    (aget story :url))
         (id     (aget story :id)))
     (when (and title url)
-      (format nil &amp;amp;quot;~A &amp;amp;lt;~A&amp;amp;gt;&amp;amp;quot; title (if (zerop (length url))
+      (format nil &amp;quot;~A &amp;lt;~A&amp;gt;&amp;quot; title (if (zerop (length url))
                                       (hn-url id)
                                       url)))))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Nous pouvons alors effectuer le traitement p&amp;#195;&amp;#169;riodique, consistant &amp;#195;&amp;#160;
-obtenir les derni&amp;#195;&amp;#168;res nouvelles, &amp;#195;&amp;#160; les formatter et &amp;#195;&amp;#160; les envoyer :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Nous pouvons alors effectuer le traitement périodique, consistant à
+obtenir les dernières nouvelles, à les formatter et à les envoyer :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun monitor-hacker-news (send)
   (dolist (story (get-new-stories))
     (let ((message (format-story (story story))))
       (when message
         (funcall send message))
       (setf *last-story* story))))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Nous rassemblons l&#039;initialisations dans une fonction :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Nous rassemblons l&#039;initialisations dans une fonction :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun monitor-initialize ()
-  (unless (find &#039;(&amp;amp;quot;application&amp;amp;quot; . &amp;amp;quot;json&amp;amp;quot;) *text-content-types*
+  (unless (find &#039;(&amp;quot;application&amp;quot; . &amp;quot;json&amp;quot;) *text-content-types*
                 :test (function equalp))
-    (push &#039;(&amp;amp;quot;application&amp;amp;quot; . &amp;amp;quot;json&amp;amp;quot;) *text-content-types*))
+    (push &#039;(&amp;quot;application&amp;quot; . &amp;quot;json&amp;quot;) *text-content-types*))
   (setf *last-story* nil))
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;ecriture-du-client-irc&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;&amp;#195;&amp;#137;criture du client &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;Se connecter au serveur &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt; avec &amp;lt;cite&amp;gt;cl-irc&amp;lt;/cite&amp;gt; et joindre un canal est
-tr&amp;#195;&amp;#169;s simple :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;ecriture-du-client-irc&quot;&gt;
+&lt;h2&gt;Écriture du client &lt;cite&gt;IRC&lt;/cite&gt;&lt;/h2&gt;
+&lt;p&gt;Se connecter au serveur &lt;cite&gt;IRC&lt;/cite&gt; avec &lt;cite&gt;cl-irc&lt;/cite&gt; et joindre un canal est
+trés simple :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defvar *connection* nil)
-(defvar *server*   &amp;amp;quot;irc.freenode.org&amp;amp;quot;)
-(defvar *nickname* &amp;amp;quot;botihn&amp;amp;quot;)
-(defvar *channel*  &amp;amp;quot;#hn&amp;amp;quot;)
+(defvar *server*   &amp;quot;irc.freenode.org&amp;quot;)
+(defvar *nickname* &amp;quot;botihn&amp;quot;)
+(defvar *channel*  &amp;quot;#hn&amp;quot;)
 (defvar *period* 10 #|seconds|#)

 (setf *connection* (connect :nickname *nickname* :server *server*))
 (join *connection* *channel*)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Nous pouvons alors transmettre les nouvelles &amp;lt;em&amp;gt;Hacker news&amp;lt;/em&amp;gt;
-periodiquement :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Nous pouvons alors transmettre les nouvelles &lt;em&gt;Hacker news&lt;/em&gt;
+periodiquement :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (monitor-initialize)
 (loop
    (monitor-hacker-news (lambda (message) (privmsg *connection* *channel* message)))
    (sleep *period*))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Cependant, ceci n&#039;est pas satisfaisant, car nous ne recevons ni ne
-traitons aucun message provenant du serveur &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;.  Pour cel&amp;#195;&amp;#160;, il faut
-appeler la fonction &amp;lt;cite&amp;gt;(read-message *connection*)&amp;lt;/cite&amp;gt;.  Cette fonction
-contient un temps mort de 10 secondes: si aucun message n&#039;est re&amp;#195;&amp;#167;u au
-bout de 10 secondes, elle retourne &amp;lt;cite&amp;gt;NIL&amp;lt;/cite&amp;gt; au lieu de &amp;lt;cite&amp;gt;T&amp;lt;/cite&amp;gt;.  Comme notre
-p&amp;#195;&amp;#169;riode de travail n&#039;est pas inf&amp;#195;&amp;#169;rieur &amp;#195;&amp;#160; 10 secondes, nous pouvons
-nous accomoder de ce temps mort.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Cependant, ceci n&#039;est pas satisfaisant, car nous ne recevons ni ne
+traitons aucun message provenant du serveur &lt;cite&gt;IRC&lt;/cite&gt;.  Pour celà, il faut
+appeler la fonction &lt;cite&gt;(read-message *connection*)&lt;/cite&gt;.  Cette fonction
+contient un temps mort de 10 secondes: si aucun message n&#039;est reçu au
+bout de 10 secondes, elle retourne &lt;cite&gt;NIL&lt;/cite&gt; au lieu de &lt;cite&gt;T&lt;/cite&gt;.  Comme notre
+période de travail n&#039;est pas inférieur à 10 secondes, nous pouvons
+nous accomoder de ce temps mort.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (monitor-initialize)
 (loop
   :with next-time = (+ *period* (get-universal-time))
   :for time = (get-universal-time)
-  :do (if (&amp;amp;lt;= next-time time)
+  :do (if (&amp;lt;= next-time time)
           (progn
             (monitor-hacker-news (lambda (message) (privmsg *connection* *channel* message)))
             (incf next-time *period*))
           (read-message *connection*) #|there&#039;s a 10 s timeout in here.|#))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Nous pouvons maintenant ajouter une fonction de traitement des
-messages priv&amp;#195;&amp;#169;s, afin de fournir sur demande, une information &amp;#195;&amp;#160; propos
-du robot &amp;lt;cite&amp;gt;botihn&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Nous pouvons maintenant ajouter une fonction de traitement des
+messages privés, afin de fournir sur demande, une information à propos
+du robot &lt;cite&gt;botihn&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (add-hook *connection* &#039;irc::irc-privmsg-message &#039;msg-hook)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Avec :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(defvar *sources-url* &amp;amp;quot;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;amp;quot;)
+&lt;/pre&gt;
+&lt;p&gt;Avec :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(defvar *sources-url* &amp;quot;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;quot;)

 (defun msg-hook (message)
   (when (string= *nickname* (first (arguments message)))
     (privmsg *connection* (source message)
-             (format nil &amp;amp;quot;I&#039;m an IRC bot forwarding HackerNews news to ~A; ~
-                          under AGPL3 license, my sources are available at &amp;amp;lt;~A&amp;amp;gt;.&amp;amp;quot;
+             (format nil &amp;quot;I&#039;m an IRC bot forwarding HackerNews news to ~A; ~
+                          under AGPL3 license, my sources are available at &amp;lt;~A&amp;gt;.&amp;quot;
                      *channel*
                      *sources-url*))))
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Avec &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;, les messages sont envoy&amp;#195;&amp;#169;s &amp;#195;&amp;#160; un canal ou &amp;#195;&amp;#160; un utilisateur
-donn&amp;#195;&amp;#169; en utilisant le m&amp;#195;&amp;#170;me message de protocole, un &amp;lt;cite&amp;gt;PRIVMSG&amp;lt;/cite&amp;gt;.  Le
-client peut distinguer &amp;#195;&amp;#160; qui le message &amp;#195;&amp;#169;tait envoy&amp;#195;&amp;#169; en observant le
+&lt;/pre&gt;
+&lt;p&gt;Avec &lt;cite&gt;IRC&lt;/cite&gt;, les messages sont envoyés à un canal ou à un utilisateur
+donné en utilisant le même message de protocole, un &lt;cite&gt;PRIVMSG&lt;/cite&gt;.  Le
+client peut distinguer à qui le message était envoyé en observant le
 premier argument du message, qui sera le nom du canal ou le nom de
-l&#039;utilisateur.  Notre robot ne r&amp;#195;&amp;#169;agit pas aux messages envoy&amp;#195;&amp;#169;s sur le
-canal, mais r&amp;#195;&amp;#169;pond seulement aux messages qui lui sont directement
-adress&amp;#195;&amp;#169;s, avec &amp;lt;cite&amp;gt;/msg&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+l&#039;utilisateur.  Notre robot ne réagit pas aux messages envoyés sur le
+canal, mais répond seulement aux messages qui lui sont directement
+adressés, avec &lt;cite&gt;/msg&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 /msg botihn heho!

-&amp;amp;lt;botihn&amp;amp;gt; I&#039;m an IRC bot forwarding HackerNews news to #hn; under AGPL3 license, my sources
+&amp;lt;botihn&amp;gt; I&#039;m an IRC bot forwarding HackerNews news to #hn; under AGPL3 license, my sources
 are available at
-&amp;amp;lt;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;amp;gt;.
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Jusqu&#039;&amp;#195;&amp;#160; pr&amp;#195;&amp;#169;sent, nous ne nous sommes pas occup&amp;#195;&amp;#169; des cas d&#039;erreur.
+&amp;lt;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;gt;.
+&lt;/pre&gt;
+&lt;p&gt;Jusqu&#039;à présent, nous ne nous sommes pas occupé des cas d&#039;erreur.
 Principalement, si une erreur survient, c&#039;est pour cause de
-d&amp;#195;&amp;#169;connexion du serveur &amp;lt;cite&amp;gt;IRC&amp;lt;/cite&amp;gt;.  Si une erreur survient avec le serveur
+déconnexion du serveur &lt;cite&gt;IRC&lt;/cite&gt;.  Si une erreur survient avec le serveur
 de nouvelles, nous obtenons des listes de nouvelles vides, et nous
-n&#039;envoyons simplement aucun message.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Ainsi, si nous d&amp;#195;&amp;#169;tectons une sortie non-locale (avec
-&amp;lt;cite&amp;gt;UNWIND-PROTECT&amp;lt;/cite&amp;gt;), nous quittons simplement la connexion, et nous
-essayons de nous reconnecter apr&amp;#195;&amp;#168;s un d&amp;#195;&amp;#169;lai al&amp;#195;&amp;#169;atoire.&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+n&#039;envoyons simplement aucun message.&lt;/p&gt;
+&lt;p&gt;Ainsi, si nous détectons une sortie non-locale (avec
+&lt;cite&gt;UNWIND-PROTECT&lt;/cite&gt;), nous quittons simplement la connexion, et nous
+essayons de nous reconnecter après un délai aléatoire.&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 (defun call-with-retry (delay thunk)
   (loop
     (handler-case (funcall thunk)
-      (error (err) (format *error-output* &amp;amp;quot;~A~%&amp;amp;quot; err)))
+      (error (err) (format *error-output* &amp;quot;~A~%&amp;quot; err)))
     (funcall delay)))

-(defmacro with-retry (delay-expression &amp;amp;amp;body body)
+(defmacro with-retry (delay-expression &amp;amp;body body)
   `(call-with-retry (lambda () ,delay-expression)
-                    (lambda () ,&amp;amp;#64;body)))
+                    (lambda () ,&amp;#64;body)))

 (defun main ()
   (catch :gazongues
@@ -459,7 +459,7 @@ essayons de nous reconnecter apr&amp;#195;&amp;#168;s un d&amp;#195;&amp;#169;la
              (loop
                :with next-time = (+ *period* (get-universal-time))
                :for time = (get-universal-time)
-               :do (if (&amp;amp;lt;= next-time time)
+               :do (if (&amp;lt;= next-time time)
                        (progn
                          (monitor-hacker-news (lambda (message) (privmsg *connection* *channel* message)))
                          (incf next-time *period*))
@@ -467,186 +467,186 @@ essayons de nous reconnecter apr&amp;#195;&amp;#168;s un d&amp;#195;&amp;#169;la
         (when *connection*
           (quit *connection*)
           (setf *connection* nil))))))
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;generation-d-un-executable-independant&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;G&amp;#195;&amp;#169;n&amp;#195;&amp;#169;ration d&#039;un ex&amp;#195;&amp;#169;cutable ind&amp;#195;&amp;#169;pendant&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;Afin de g&amp;#195;&amp;#169;n&amp;#195;&amp;#169;rer un ex&amp;#195;&amp;#169;cutable ind&amp;#195;&amp;#169;pendant, nous &amp;#195;&amp;#169;crivons un petit
-script &amp;lt;cite&amp;gt;generate-application.lisp&amp;lt;/cite&amp;gt; qui sera ex&amp;#195;&amp;#169;cut&amp;#195;&amp;#169; dans un
-environnement vierge.  Ce script charge &amp;lt;cite&amp;gt;quicklisp&amp;lt;/cite&amp;gt;, charge botihn, et
-enregistre une image ex&amp;#195;&amp;#169;cutable, en indiquant la fonction &amp;lt;cite&amp;gt;main&amp;lt;/cite&amp;gt; comme
-point d&#039;entr&amp;#195;&amp;#169;e du programme (&amp;lt;cite&amp;gt;toplevel-function&amp;lt;/cite&amp;gt;) :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
-(in-package &amp;amp;quot;COMMON-LISP-USER&amp;amp;quot;)
-(progn (format t &amp;amp;quot;~%;;; Loading quicklisp.~%&amp;amp;quot;) (finish-output) (values))
-(load #P&amp;amp;quot;~/quicklisp/setup.lisp&amp;amp;quot;)
-
-(progn (format t &amp;amp;quot;~%;;; Loading botihn.~%&amp;amp;quot;) (finish-output) (values))
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;generation-d-un-executable-independant&quot;&gt;
+&lt;h2&gt;Génération d&#039;un exécutable indépendant&lt;/h2&gt;
+&lt;p&gt;Afin de générer un exécutable indépendant, nous écrivons un petit
+script &lt;cite&gt;generate-application.lisp&lt;/cite&gt; qui sera exécuté dans un
+environnement vierge.  Ce script charge &lt;cite&gt;quicklisp&lt;/cite&gt;, charge botihn, et
+enregistre une image exécutable, en indiquant la fonction &lt;cite&gt;main&lt;/cite&gt; comme
+point d&#039;entrée du programme (&lt;cite&gt;toplevel-function&lt;/cite&gt;) :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
+(in-package &amp;quot;COMMON-LISP-USER&amp;quot;)
+(progn (format t &amp;quot;~%;;; Loading quicklisp.~%&amp;quot;) (finish-output) (values))
+(load #P&amp;quot;~/quicklisp/setup.lisp&amp;quot;)
+
+(progn (format t &amp;quot;~%;;; Loading botihn.~%&amp;quot;) (finish-output) (values))
 (push (make-pathname :name nil :type nil :version nil
                      :defaults *load-truename*) asdf:*central-registry*)

 (ql:quickload :com.informatimago.small-cl-pgms.botihn)

-(progn (format t &amp;amp;quot;~%;;; Saving hotihn.~%&amp;amp;quot;) (finish-output) (values))
+(progn (format t &amp;quot;~%;;; Saving hotihn.~%&amp;quot;) (finish-output) (values))
 ;; This doesn&#039;t return.
 #+ccl (ccl::save-application
-       &amp;amp;quot;botihn&amp;amp;quot;
+       &amp;quot;botihn&amp;quot;
        :mode #o755 :prepend-kernel t
        :toplevel-function (function com.informatimago.small-cl-pgms.botihn:main)
        :init-file nil
        :error-handler :quit)
-&amp;lt;/pre&amp;gt;
-&amp;lt;p&amp;gt;Un petit &amp;lt;cite&amp;gt;Makefile&amp;lt;/cite&amp;gt; permet d&#039;ex&amp;#195;&amp;#169;cuter ce script facilement &amp;#195;&amp;#160; partir du
-shell &amp;lt;cite&amp;gt;unix&amp;lt;/cite&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+&lt;/pre&gt;
+&lt;p&gt;Un petit &lt;cite&gt;Makefile&lt;/cite&gt; permet d&#039;exécuter ce script facilement à partir du
+shell &lt;cite&gt;unix&lt;/cite&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 all:botihn
 botihn: com.informatimago.small-cl-pgms.botihn.asd  botihn.lisp generate-application.lisp
-    ccl -norc &amp;amp;lt; generate-application.lisp
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;section&amp;quot; id=&amp;quot;conclusion&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Conclusion&amp;lt;/h2&amp;gt;
-&amp;lt;p&amp;gt;Vous pouvez obtenir les sources complets de ce petit exemple &amp;#195;&amp;#160;:
-&amp;lt;a class=&amp;quot;reference external&amp;quot; href=&amp;quot;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;quot;&amp;gt;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&amp;lt;/a&amp;gt; :&amp;lt;/p&amp;gt;
-&amp;lt;pre class=&amp;quot;literal-block&amp;quot;&amp;gt;
+    ccl -norc &amp;lt; generate-application.lisp
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
+&lt;h2&gt;Conclusion&lt;/h2&gt;
+&lt;p&gt;Vous pouvez obtenir les sources complets de ce petit exemple à:
+&lt;a class=&quot;reference external&quot; href=&quot;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&quot;&gt;https://gitlab.com/com-informatimago/com-informatimago/tree/master/small-cl-pgms/botihn/&lt;/a&gt; :&lt;/p&gt;
+&lt;pre class=&quot;literal-block&quot;&gt;
 git clone https://gitlab.com/com-informatimago/com-informatimago.git
 cd com-informatimago/small-cl-pgms/botihn/
 emacs # edit configuration
 make
-&amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/botihn/botihn-fr.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/raspberrypi/ccl-sur-qemu.html</id><published>2013-12-20T22:54:26+0100</published><updated><iso8601-date/></updated><title type="text">Clozure CL sur Raspberry Pi (FR)</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/raspberry-pi.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Clozure CL sur Raspberry Pi (FR)&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Installer Clozure CL sur Raspberry Pi.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;ccl-sur-qemu&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;Raspberry Pi&amp;lt;/h1&amp;gt;
-
-
-&amp;lt;p&amp;gt;Je devrais recevoir un Raspberry Pi cette semaine.  Prenant un peu
-d&#039;avance, j&#039;ai essay&amp;#195;&amp;#169; &amp;lt;a href=&amp;quot;http://ccl.clozure.com/&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;Clozure CL&amp;lt;/tt&amp;gt;&amp;lt;/a&amp;gt;
-sur &amp;lt;a href=&amp;quot;http://www.raspbian.org/&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;raspbian&amp;lt;/tt&amp;gt;&amp;lt;/a&amp;gt;  sur l&#039;&amp;#195;&amp;#169;mulateur
-&amp;lt;a href=&amp;quot;https://launchpad.net/qemu-linaro&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;qemu linaro&amp;lt;/tt&amp;gt;&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
-
-
-&amp;lt;h2&amp;gt;Instructions&amp;lt;/h2&amp;gt;
-
-
-&amp;lt;p&amp;gt;Suivons les instructions de
-&amp;lt;a href=&amp;quot;http://linux-news.org/index.php/2012/06/02/raspberry-pi-emulation/&amp;quot;&amp;gt;
-Linux-News Raspberry PI Emulation&amp;lt;/a&amp;gt;.
-
-&amp;lt;pre&amp;gt;
-RPI=&amp;quot;$HOME/raspberrypi&amp;quot;
-mkdir &amp;quot;$RPI&amp;quot;
-cd &amp;quot;$RPI&amp;quot;
+&lt;/pre&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/botihn/botihn-fr.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/raspberrypi/ccl-sur-qemu.html</id><published>2013-12-20T22:54:26+0100</published><updated>2015-10-26T00:27:48+0100</updated><title type="text">Clozure CL sur Raspberry Pi (FR)</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/raspberry-pi.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/raspberrypi/ccl-sur-qemu.html&quot;&gt;Clozure CL sur Raspberry Pi (FR)&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Installer Clozure CL sur Raspberry Pi.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;ccl-sur-qemu&quot;&gt;
+&lt;h1&gt;Raspberry Pi&lt;/h1&gt;
+
+
+&lt;p&gt;Je devrais recevoir un Raspberry Pi cette semaine.  Prenant un peu
+d&#039;avance, j&#039;ai essayé &lt;a href=&quot;http://ccl.clozure.com/&quot;&gt;&lt;tt&gt;Clozure CL&lt;/tt&gt;&lt;/a&gt;
+sur &lt;a href=&quot;http://www.raspbian.org/&quot;&gt;&lt;tt&gt;raspbian&lt;/tt&gt;&lt;/a&gt;  sur l&#039;émulateur
+&lt;a href=&quot;https://launchpad.net/qemu-linaro&quot;&gt;&lt;tt&gt;qemu linaro&lt;/tt&gt;&lt;/a&gt;.&lt;/p&gt;
+
+
+&lt;h2&gt;Instructions&lt;/h2&gt;
+
+
+&lt;p&gt;Suivons les instructions de
+&lt;a href=&quot;http://linux-news.org/index.php/2012/06/02/raspberry-pi-emulation/&quot;&gt;
+Linux-News Raspberry PI Emulation&lt;/a&gt;.
+
+&lt;pre&gt;
+RPI=&quot;$HOME/raspberrypi&quot;
+mkdir &quot;$RPI&quot;
+cd &quot;$RPI&quot;
 wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu
 wget http://downloads.raspberrypi.org/images/raspbian/2012-07-15-wheezy-raspbian/2012-07-15-wheezy-raspbian.zip
 unzip -x 2012-07-15-wheezy-raspbian.zip
 git clone git://git.linaro.org/qemu/qemu-linaro.git
 cd qemu-linaro
-./configure --prefix=&amp;quot;$RPI&amp;quot;/opt --target-list=arm-softmmu
+./configure --prefix=&quot;$RPI&quot;/opt --target-list=arm-softmmu
 make
 make install
-cd &amp;quot;$RPI&amp;quot;
+cd &quot;$RPI&quot;
 ./opt/bin/qemu-system-arm \
     -kernel kernel-qemu \
     -cpu arm1136-r2 \
     -M versatilepb \
     -no-reboot \
-    -append &amp;quot;root=/dev/sda2 panic=1&amp;quot; \
+    -append &quot;root=/dev/sda2 panic=1&quot; \
     -hda 2012-07-15-wheezy-raspbian.img
-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;






-&amp;lt;p&amp;gt;&amp;#195;&amp;#135;a d&amp;#195;&amp;#169;marre bien, mais on n&#039;a pas acc&amp;#195;&amp;#168;s au r&amp;#195;&amp;#169;seau.  Avec un interface tun configur&amp;#195;&amp;#169; sur la machine
-h&amp;#195;&amp;#180;te, et un serveur DHCP sur le r&amp;#195;&amp;#169;seau local, on peut configurer un interface r&amp;#195;&amp;#169;seau tap avec la
+&lt;p&gt;Ça démarre bien, mais on n&#039;a pas accès au réseau.  Avec un interface tun configuré sur la machine
+hôte, et un serveur DHCP sur le réseau local, on peut configurer un interface réseau tap avec la
 commande suivante:


-&amp;lt;pre&amp;gt;
-cd &amp;quot;$RPI&amp;quot;
+&lt;pre&gt;
+cd &quot;$RPI&quot;
 ./opt/bin/qemu-system-arm \
     -net nic,macaddr=52:54:0:0:0:77 -net tap \
     -kernel kernel-qemu \
     -cpu arm1136-r2 \
     -M versatilepb \
     -no-reboot \
-    -append &amp;quot;root=/dev/sda2 panic=1&amp;quot; \
+    -append &quot;root=/dev/sda2 panic=1&quot; \
     -hda 2012-07-15-wheezy-raspbian.img
-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;p&amp;gt;On peut alors se connecter au compte &amp;lt;tt&amp;gt;pi&amp;lt;/tt&amp;gt; (mot de passe par d&amp;#195;&amp;#169;faut: &amp;lt;tt&amp;gt;raspberry&amp;lt;/tt&amp;gt;),
-et utiliser la connection r&amp;#195;&amp;#169;seau pour installer &amp;lt;a href=&amp;quot;http://ccl.clozure.com/&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;Clozure CL&amp;lt;/tt&amp;gt;&amp;lt;/a&amp;gt;:&amp;lt;/p&amp;gt;
+&lt;p&gt;On peut alors se connecter au compte &lt;tt&gt;pi&lt;/tt&gt; (mot de passe par défaut: &lt;tt&gt;raspberry&lt;/tt&gt;),
+et utiliser la connection réseau pour installer &lt;a href=&quot;http://ccl.clozure.com/&quot;&gt;&lt;tt&gt;Clozure CL&lt;/tt&gt;&lt;/a&gt;:&lt;/p&gt;


-&amp;lt;pre&amp;gt;
+&lt;pre&gt;
 svn co http://svn.clozure.com/publicsvn/openmcl/trunk/linuxarm/ccl
 ccl/armcl
-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;p&amp;gt;Et voil&amp;#195;&amp;#160; le r&amp;#195;&amp;#169;sultat:
-&amp;lt;img src=&amp;quot;ccl-raspberry-pi-qemu.png&amp;quot; alt=&amp;quot;Booting Clozure CL on raspbian on qemu&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;/p&amp;gt;
+&lt;p&gt;Et voilà le résultat:
+&lt;img src=&quot;ccl-raspberry-pi-qemu.png&quot; alt=&quot;Booting Clozure CL on raspbian on qemu&quot;&gt;&lt;/img&gt;
+&lt;/p&gt;


-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/raspberrypi/ccl-sur-qemu.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html</id><published>2012-12-12T11:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Sudoku Solver</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/sudoku.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Sudoku Solver&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Sudoku Solver&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Brainfuck, Common Lisp, Lisp, virtual machine, compiler, emulator&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;sudoku-solver&amp;quot;&amp;gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/raspberrypi/ccl-sur-qemu.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html</id><published>2012-12-12T11:00:00+0100</published><updated>2015-10-26T00:27:48+0100</updated><title type="text">Sudoku Solver</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/sudoku.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html&quot;&gt;Sudoku Solver&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Sudoku Solver&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Brainfuck, Common Lisp, Lisp, virtual machine, compiler, emulator&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;sudoku-solver&quot;&gt;


-&amp;lt;h1&amp;gt;Sudoku Solver&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Sudoku Solver&lt;/h1&gt;




-&amp;lt;p&amp;gt;This file contains a sudoku solver.&amp;lt;/p&amp;gt;
+&lt;p&gt;This file contains a sudoku solver.&lt;/p&gt;




-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;sudoku-solver.lisp&amp;quot;&amp;gt;sudoku-solver.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;sudoku-solver.lisp&quot;&gt;sudoku-solver.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;




-&amp;lt;p&amp;gt;Example:&amp;lt;/p&amp;gt;
+&lt;p&gt;Example:&lt;/p&gt;




-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-prompt&amp;quot;&amp;gt;sudoku-solver&amp;amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;(use-package :com.informatimago.sudoku-solver)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-result&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-inputed-output&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-result&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-prompt&amp;quot;&amp;gt;sudoku-solver&amp;amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-special-operator&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;let*&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; ((sudoku #2A((x x x 8 x 4 2 x x)
+&lt;pre class=&quot;dribble&quot;&gt;&lt;span class=&quot;slime-repl-prompt&quot;&gt;sudoku-solver&amp;gt; &lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;(use-package :com.informatimago.sudoku-solver)&lt;/span&gt;&lt;span class=&quot;slime-repl-result&quot;&gt;&lt;span class=&quot;slime-repl-inputed-output&quot;&gt;t&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-result&quot;&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-prompt&quot;&gt;sudoku-solver&amp;gt; &lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cl-special-operator&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;let*&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; ((sudoku #2A((x x x 8 x 4 2 x x)
                                   (6 x 8 x 2 x x x 4)
                                   (2 1 x 6 5 3 x x 8)
                                   (x 7 x 2 x 6 x 9 x)
@@ -655,13 +655,13 @@ ccl/armcl
                                   (x 6 x 4 1 5 7 x x)
                                   (x x 7 x x 8 3 x x)
                                   (x 5 9 x x x x 1 x))))
-                 (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-macro&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;multiple-value-bind&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; (solutions tries) (sudoku-solver sudoku)
-                   (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-function&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;terpri&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;)
+                 (&lt;/span&gt;&lt;span class=&quot;cl-macro&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;multiple-value-bind&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; (solutions tries) (sudoku-solver sudoku)
+                   (&lt;/span&gt;&lt;span class=&quot;cl-function&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;terpri&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;)
                    (sudoku-print sudoku)
-                   (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-function&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;format&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-system-class&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;&amp;quot;  has ~D solution~:*~P,~%  found in ~D tries.~2%&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;
-                           (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-function&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;length&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; solutions) tries)
-                   (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-function&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;map&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;cl-type&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt;nil&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-input&amp;quot;&amp;gt; &#039;sudoku-print solutions)))
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-output&amp;quot;&amp;gt;
+                   (&lt;/span&gt;&lt;span class=&quot;cl-function&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;format&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cl-system-class&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;t&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; &lt;/span&gt;&lt;span class=&quot;string&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;&quot;  has ~D solution~:*~P,~%  found in ~D tries.~2%&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;
+                           (&lt;/span&gt;&lt;span class=&quot;cl-function&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;length&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; solutions) tries)
+                   (&lt;/span&gt;&lt;span class=&quot;cl-function&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;map&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cl-type&quot;&gt;&lt;span class=&quot;slime-repl-input&quot;&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-input&quot;&gt; &#039;sudoku-print solutions)))
+&lt;/span&gt;&lt;span class=&quot;slime-repl-output&quot;&gt;
 +---+---+---+---+---+---+---+---+---+
 | .   6   2 | .   .   4 | .   .   . |
 |   +   +   |   +   +   |   +   +   |
@@ -705,57 +705,57 @@ ccl/armcl
 | 1   4   8 | 3   2   7 | 9   5   6 |
 +---+---+---+---+---+---+---+---+---+

-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-result&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-inputed-output&amp;quot;&amp;gt;nil&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-result&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;slime-repl-prompt&amp;quot;&amp;gt;sudoku-solver&amp;amp;gt; &amp;lt;/span&amp;gt;
-  &amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/wang.html</id><published>2012-10-04T14:52:16+0100</published><updated><iso8601-date/></updated><title type="text">Old LISP programs still run in Common Lisp</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/hao-wang.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Old LISP programs still run in Common Lisp&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;How to run in Common Lisp, Hao Wang&#039;s algorithm published by John
+&lt;/span&gt;&lt;span class=&quot;slime-repl-result&quot;&gt;&lt;span class=&quot;slime-repl-inputed-output&quot;&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-result&quot;&gt;&lt;/span&gt;&lt;span class=&quot;slime-repl-prompt&quot;&gt;sudoku-solver&amp;gt; &lt;/span&gt;
+  &lt;/pre&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/wang.html</id><published>2012-10-04T14:52:16+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Old LISP programs still run in Common Lisp</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/hao-wang.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/wang.html&quot;&gt;Old LISP programs still run in Common Lisp&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;How to run in Common Lisp, Hao Wang&#039;s algorithm published by John
     McCarthy as an application of LISP, in the manual of the first version
-    of LISP on IBM 704, dated March 1960.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;LISP 1.5, Common Lisp, Lisp, Wang algorithm&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;wang&amp;quot;&amp;gt;
+    of LISP on IBM 704, dated March 1960.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;LISP 1.5, Common Lisp, Lisp, Wang algorithm&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;wang&quot;&gt;


-&amp;lt;h1&amp;gt;Old LISP programs still run in Common Lisp&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Old LISP programs still run in Common Lisp&lt;/h1&gt;




-&amp;lt;p&amp;gt;Actually, any Common Lisp implementation can be applied with
+&lt;p&gt;Actually, any Common Lisp implementation can be applied with
      almost all Lisp material from any time, thanks to the concensual
-     approach of the Common Lisp standard.&amp;lt;/p&amp;gt;
+     approach of the Common Lisp standard.&lt;/p&gt;




-&amp;lt;p&amp;gt;For example, here is how you can run a lisp program written in
+&lt;p&gt;For example, here is how you can run a lisp program written in
      1960 in a Common Lisp of 2014.  Rendez-vous in 28 years to see
-     how you can run a 1996 perl program in perl 2042...&amp;lt;/p&amp;gt;
+     how you can run a 1996 perl program in perl 2042...&lt;/p&gt;




-&amp;lt;p&amp;gt;This Wang&#039;s algorithm has been popularized by John McCarthy as an
+&lt;p&gt;This Wang&#039;s algorithm has been popularized by John McCarthy as an
      application of LISP, published in the manual of the first version
-     of LISP, LISP 1 impl&amp;#195;&amp;#169;ment&amp;#195;&amp;#169; sur IBM 704, dated March 1960.
-    &amp;lt;a href=&amp;quot;http://community.computerhistory.org/scc/projects/LISP/book/LISP%20I%20Programmers%20Manual.pdf&amp;quot;&amp;gt;LISP 1 Programmer&#039;s Manual, page 32&amp;lt;/a&amp;gt;
+     of LISP, LISP 1 implémenté sur IBM 704, dated March 1960.
+    &lt;a href=&quot;http://community.computerhistory.org/scc/projects/LISP/book/LISP%20I%20Programmers%20Manual.pdf&quot;&gt;LISP 1 Programmer&#039;s Manual, page 32&lt;/a&gt;
     (and also reproduced in
-    &amp;lt;a href=&amp;quot;http://community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=52&amp;quot;&amp;gt;LISP
+    &lt;a href=&quot;http://community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=52&quot;&gt;LISP
       1.5 Programmer&#039;s Manual, Chapter VIII, page 52: A Complete LISP
       Program - the Wang Algorithm for the Propositional
-      Calculus.&amp;lt;/a&amp;gt;). &amp;lt;/p&amp;gt;
+      Calculus.&lt;/a&gt;). &lt;/p&gt;





-&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;
+&lt;pre class=&quot;code&quot;&gt;
 ----(wang-cl.lisp)------------------------------------------------------
 (shadow &#039;(trace untrace))
 (defun trace   (functions) (eval `(cl:trace   ,@functions)))
@@ -786,7 +786,7 @@ ccl/armcl
                                           (read cards))))
                       (print (apply command arguments))))))))))

-(driver &amp;quot;wang.job&amp;quot;)
+(driver &quot;wang.job&quot;)
 ----(wang.job)----------------------------------------------------------
 * M948-1207 LEVIN, LISP, TEST, 2,3,250,0
         TEST WANG ALGORITHM FOR THE PROPOSITIONAL CALCULUS
@@ -886,7 +886,7 @@ STOP)))    )))     )))     )))
 FIN     END OF LISP RUN        M948-1207 LEVIN
 ------------------------------------------------------------------------

-[60]&amp;gt; (load&amp;quot;wang-cl.lisp&amp;quot;)
+[60]&gt; (load&quot;wang-cl.lisp&quot;)
 ;; Loading file wang-cl.lisp ...
 WANG ALGORITHM FOR THE PROPOSITIONAL CALCULUS

@@ -913,117 +913,117 @@ NIL
 6. Trace: (TH &#039;(P) &#039;NIL &#039;NIL &#039;((OR P Q)))
 7. Trace: (THR &#039;(OR P Q) &#039;(P) &#039;NIL &#039;NIL &#039;NIL)
 8. Trace: (TH2R &#039;(P Q) &#039;(P) &#039;NIL &#039;NIL &#039;NIL)
-8. Trace: TH2R ==&amp;gt; (P)
-7. Trace: THR ==&amp;gt; (P)
-6. Trace: TH ==&amp;gt; (P)
-5. Trace: TH2 ==&amp;gt; (P)
-4. Trace: TH2 ==&amp;gt; (P)
-3. Trace: TH1 ==&amp;gt; (P)
-2. Trace: TH1 ==&amp;gt; (P)
-1. Trace: THEOREM ==&amp;gt; (P)
+8. Trace: TH2R ==&gt; (P)
+7. Trace: THR ==&gt; (P)
+6. Trace: TH ==&gt; (P)
+5. Trace: TH2 ==&gt; (P)
+4. Trace: TH2 ==&gt; (P)
+3. Trace: TH1 ==&gt; (P)
+2. Trace: TH1 ==&gt; (P)
+1. Trace: THEOREM ==&gt; (P)
 (P)
 (THEOREM TH1 TH2 THR THL TH1L TH1R TH2L TH2R TH11)
 1. Trace: (TH &#039;NIL &#039;((OR A (NOT B))) &#039;NIL &#039;((IMPLIES (AND P Q) (EQUIV P Q))))
 2. Trace: (TH &#039;(A) &#039;NIL &#039;NIL &#039;((IMPLIES (AND P Q) (EQUIV P Q))))
 3. Trace: (TH &#039;(A) &#039;((AND P Q)) &#039;NIL &#039;((EQUIV P Q)))
 4. Trace: (TH &#039;(Q P A) &#039;NIL &#039;NIL &#039;((EQUIV P Q)))
-4. Trace: TH ==&amp;gt; (P A)
-3. Trace: TH ==&amp;gt; (P A)
-2. Trace: TH ==&amp;gt; (P A)
+4. Trace: TH ==&gt; (P A)
+3. Trace: TH ==&gt; (P A)
+2. Trace: TH ==&gt; (P A)
 2. Trace: (TH &#039;NIL &#039;((NOT B)) &#039;NIL &#039;((IMPLIES (AND P Q) (EQUIV P Q))))
 3. Trace: (TH &#039;NIL &#039;NIL &#039;(B) &#039;((IMPLIES (AND P Q) (EQUIV P Q))))
 4. Trace: (TH &#039;NIL &#039;((AND P Q)) &#039;(B) &#039;((EQUIV P Q)))
 5. Trace: (TH &#039;(Q P) &#039;NIL &#039;(B) &#039;((EQUIV P Q)))
-5. Trace: TH ==&amp;gt; (P)
-4. Trace: TH ==&amp;gt; (P)
-3. Trace: TH ==&amp;gt; (P)
-2. Trace: TH ==&amp;gt; (P)
-1. Trace: TH ==&amp;gt; (P)
+5. Trace: TH ==&gt; (P)
+4. Trace: TH ==&gt; (P)
+3. Trace: TH ==&gt; (P)
+2. Trace: TH ==&gt; (P)
+1. Trace: TH ==&gt; (P)
 (P)
 ;; Loaded file wang-cl.lisp
 T
-[61]&amp;gt;
-  &amp;lt;/pre&amp;gt;
+[61]&gt;
+  &lt;/pre&gt;




-&amp;lt;p&amp;gt;Note, the output obviously differ in the form, but the semantics
+&lt;p&gt;Note, the output obviously differ in the form, but the semantics
      are the same, notably the result of the theorem function calls is
-     &amp;quot;true&amp;quot; both in 2014 Common Lisp and in 1966 LISP 1.5. &amp;lt;/p&amp;gt;
+     &quot;true&quot; both in 2014 Common Lisp and in 1966 LISP 1.5. &lt;/p&gt;




-&amp;lt;p&amp;gt;You may also download the sources here:&amp;lt;/p&amp;gt;
+&lt;p&gt;You may also download the sources here:&lt;/p&gt;



-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;wang-cl.lisp&amp;quot;&amp;gt;wang-cl.lisp&amp;lt;/a&amp;gt;
+&lt;li&gt;&lt;a href=&quot;wang-cl.lisp&quot;&gt;wang-cl.lisp&lt;/a&gt;

-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;wang.job&amp;quot;&amp;gt;wang.job&amp;lt;/a&amp;gt;
-  &amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
+&lt;li&gt;&lt;a href=&quot;wang.job&quot;&gt;wang.job&lt;/a&gt;
+  &lt;/li&gt;
+&lt;/li&gt;
+&lt;/ul&gt;



-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/wang.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/intersection-r5rs-common-lisp-emacs-lisp/index.html</id><published>2011-05-27T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Intersection Common Lisp, Emacs Lisp and R5RS Scheme</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/intersection.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Intersection Common Lisp, Emacs Lisp and R5RS Scheme&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A program that can be interpreted by both Common Lisp, Emacs Lisp and R5RS Scheme.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Intersection, Common Lisp, Emacs Lisp, R5RS, Scheme, Lisp&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;intersection-r5rs-cl-el&amp;quot;&amp;gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/wang.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/intersection-r5rs-common-lisp-emacs-lisp/index.html</id><published>2011-05-27T12:00:00+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Intersection Common Lisp, Emacs Lisp and R5RS Scheme</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/intersection.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/intersection-r5rs-common-lisp-emacs-lisp/index.html&quot;&gt;Intersection Common Lisp, Emacs Lisp and R5RS Scheme&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A program that can be interpreted by both Common Lisp, Emacs Lisp and R5RS Scheme.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Intersection, Common Lisp, Emacs Lisp, R5RS, Scheme, Lisp&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;intersection-r5rs-cl-el&quot;&gt;


-&amp;lt;h1&amp;gt;Intersection Common Lisp, Emacs Lisp and R5RS Scheme&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Intersection Common Lisp, Emacs Lisp and R5RS Scheme&lt;/h1&gt;




-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;intersection-cl-el-r5rs.lisp&amp;quot;&amp;gt;intersection-cl-el-r5rs.lisp&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
+&lt;p&gt;&lt;a href=&quot;intersection-cl-el-r5rs.lisp&quot;&gt;intersection-cl-el-r5rs.lisp&lt;/a&gt;&lt;/p&gt;



-&amp;lt;p&amp;gt;This lisp source file can be loaded and run on:
+&lt;p&gt;This lisp source file can be loaded and run on:

-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt; any Common Lisp conforming implementation, &amp;lt;/li&amp;gt;
+&lt;li&gt; any Common Lisp conforming implementation, &lt;/li&gt;



-&amp;lt;li&amp;gt; any R5RS implementation,&amp;lt;/li&amp;gt;
+&lt;li&gt; any R5RS implementation,&lt;/li&gt;



-&amp;lt;li&amp;gt; GNU emacs (tested with emacs-23 and emacs-24).&amp;lt;/li&amp;gt;
+&lt;li&gt; GNU emacs (tested with emacs-23 and emacs-24).&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;


-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;




-&amp;lt;p&amp;gt;Example:
+&lt;p&gt;Example:

-&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;
-        &amp;lt;span class=&amp;quot;comint-highlight-prompt&amp;quot;&amp;gt;[pjb@kuiper :0 intersection-r5rs-common-lisp-emacs-lisp]$ &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comint-highlight-input&amp;quot;&amp;gt;make test-intersection-cl-el-r5rs&amp;lt;/span&amp;gt;
+&lt;pre class=&quot;code&quot;&gt;
+        &lt;span class=&quot;comint-highlight-prompt&quot;&gt;[pjb@kuiper :0 intersection-r5rs-common-lisp-emacs-lisp]$ &lt;/span&gt;&lt;span class=&quot;comint-highlight-input&quot;&gt;make test-intersection-cl-el-r5rs&lt;/span&gt;


 ;;======================================================================
@@ -1031,90 +1031,90 @@ T
 ;;

 ;; Common Lisp
-clisp &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-ansi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-norc&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-q&amp;lt;/span&amp;gt; intersection-cl-el-r5rs.lisp
+clisp &lt;span class=&quot;comment&quot;&gt;-ansi&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-norc&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-q&lt;/span&gt; intersection-cl-el-r5rs.lisp

 (booted a lisp over common-lisp)
 ((fact 10) = 3628800)

 ;; Emacs Lisp
-emacs &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-Q&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;--batch&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-l&amp;lt;/span&amp;gt; intersection-cl-el-r5rs.lisp &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-q&amp;lt;/span&amp;gt;
+emacs &lt;span class=&quot;comment&quot;&gt;-Q&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;--batch&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-l&lt;/span&gt; intersection-cl-el-r5rs.lisp &lt;span class=&quot;comment&quot;&gt;-q&lt;/span&gt;

 (booted a lisp over emacs-lisp)
 ((fact 10) = 3628800)

 ;; Scheme
-bigloo &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-no-hello&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-q&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-w&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-load&amp;lt;/span&amp;gt;  intersection-cl-el-r5rs.lisp &amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;-eval&amp;lt;/span&amp;gt; &#039;(quit)&#039;
+bigloo &lt;span class=&quot;comment&quot;&gt;-no-hello&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-w&lt;/span&gt; &lt;span class=&quot;comment&quot;&gt;-load&lt;/span&gt;  intersection-cl-el-r5rs.lisp &lt;span class=&quot;comment&quot;&gt;-eval&lt;/span&gt; &#039;(quit)&#039;

 (booted a lisp over scheme)
 ((fact 10) = 3628800)
-&amp;lt;span class=&amp;quot;comint-highlight-prompt&amp;quot;&amp;gt;[pjb@kuiper :0 intersection-r5rs-common-lisp-emacs-lisp]$&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;
+&lt;span class=&quot;comint-highlight-prompt&quot;&gt;[pjb@kuiper :0 intersection-r5rs-common-lisp-emacs-lisp]$&lt;/span&gt;&lt;/pre&gt;



-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/intersection-r5rs-common-lisp-emacs-lisp/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/flpl/index.html</id><published>2011-01-19T00:55:26+0100</published><updated><iso8601-date/></updated><title type="text">A Fortran-Compiled List-Processing Language</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/IBM704b.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;A Fortran-Compiled List-Processing Language&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A transcription of the April 1959 article &amp;quot;A Fortran-Compiled List-Processing Language&amp;quot; by: H. Gelernter, J. R. Hansen, C. L. Gerberich.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;flpl&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;A Fortran-Compiled List-Processing Language&amp;lt;/h1&amp;gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/intersection-r5rs-common-lisp-emacs-lisp/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/flpl/index.html</id><published>2011-01-19T00:55:26+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">A Fortran-Compiled List-Processing Language</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/IBM704b.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/flpl/index.html&quot;&gt;A Fortran-Compiled List-Processing Language&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A transcription of the April 1959 article &quot;A Fortran-Compiled List-Processing Language&quot; by: H. Gelernter, J. R. Hansen, C. L. Gerberich.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;flpl&quot;&gt;
+&lt;h1&gt;A Fortran-Compiled List-Processing Language&lt;/h1&gt;



-&amp;lt;p&amp;gt;Here is a transcription of the April 1959 article  &amp;quot;A
-Fortran-Compiled List-Processing Language&amp;quot; by: H. Gelernter,
+&lt;p&gt;Here is a transcription of the April 1959 article  &quot;A
+Fortran-Compiled List-Processing Language&quot; by: H. Gelernter,
 J. R. Hansen, C. L. Gerberich.

-&amp;lt;ul&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;flpl.pdf&amp;quot;&amp;gt;PDF file&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;flpl.html&amp;quot;&amp;gt;HTML file&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;flpl.txt&amp;quot;&amp;gt;reStructured source&amp;lt;/a&amp;gt; with &amp;lt;a href=&amp;quot;figures.lisp&amp;quot;&amp;gt;lisp source&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;a href=&quot;flpl.pdf&quot;&gt;PDF file&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;flpl.html&quot;&gt;HTML file&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;flpl.txt&quot;&gt;reStructured source&lt;/a&gt; with &lt;a href=&quot;figures.lisp&quot;&gt;lisp source&lt;/a&gt;&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ul&gt;


-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/flpl/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/emacs-colors/index.html</id><published>2010-10-20T08:16:58+0100</published><updated><iso8601-date/></updated><title type="text">Playing with colors in emacs</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/colors.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Playing with colors in emacs&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Having fun with color text properties in GNU emacs.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;emacs-color&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;Playing with colors in emacs&amp;lt;/h1&amp;gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/flpl/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/emacs-colors/index.html</id><published>2010-10-20T08:16:58+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Playing with colors in emacs</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/colors.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/emacs-colors/index.html&quot;&gt;Playing with colors in emacs&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Having fun with color text properties in GNU emacs.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;emacs-color&quot;&gt;
+&lt;h1&gt;Playing with colors in emacs&lt;/h1&gt;


-&amp;lt;p&amp;gt;The fundamental feature to set the color of characters in emacs are
-the text properties, namely, the face text property.&amp;lt;/p&amp;gt;
+&lt;p&gt;The fundamental feature to set the color of characters in emacs are
+the text properties, namely, the face text property.&lt;/p&gt;


-&amp;lt;p&amp;gt;An important precondition is to disable font-locking, since this
+&lt;p&gt;An important precondition is to disable font-locking, since this
 feature will override any colorizing you may be doing, usually soon
-enough that you won&#039;t even see the result of your settings.&amp;lt;/p&amp;gt;
+enough that you won&#039;t even see the result of your settings.&lt;/p&gt;


-&amp;lt;pre&amp;gt;
+&lt;pre&gt;
 (add-text-properties start end
-     `(face (:foreground ,(format &amp;quot;#%02x%02x%02x&amp;quot; red green blue)))
-&amp;lt;/pre&amp;gt;
+     `(face (:foreground ,(format &quot;#%02x%02x%02x&quot; red green blue)))
+&lt;/pre&gt;



-&amp;lt;img src=&amp;quot;rainbow.png&amp;quot; alt=&amp;quot;A picture of the code of the rainbow function, applied to itself.&amp;quot;&amp;gt;
+&lt;img src=&quot;rainbow.png&quot; alt=&quot;A picture of the code of the rainbow function, applied to itself.&quot;&gt;


-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

 (require &#039;cl)

@@ -1125,9 +1125,9 @@ enough that you won&#039;t even see the result of your settings.&amp;lt;/p&amp;g
              (ired   (/ (- ered   red)   count))
              (igreen (/ (- egreen green) count))
              (iblue  (/ (- eblue  blue)  count)))
-        (while (&amp;amp;lt; 0 count)
+        (while (&amp;lt; 0 count)
           (add-text-properties start (incf start)
-                               `(face (:foreground ,(format &amp;quot;#%02x%02x%02x&amp;quot;
+                               `(face (:foreground ,(format &quot;#%02x%02x%02x&quot;
                                                             red green blue))))
           (incf red   ired)
           (incf green igreen)
@@ -1142,15 +1142,15 @@ enough that you won&#039;t even see the result of your settings.&amp;lt;/p&amp;g
         &#039;(0 0 0))))

 (defun rainbow (start end)
-  (interactive &amp;quot;r&amp;quot;)
+  (interactive &quot;r&quot;)
   (let ((range (truncate (- end start) 5)))
     (loop
-       for (from to) on (list (rgb &amp;quot;red&amp;quot;)
-                              (rgb &amp;quot;orange&amp;quot;)
-                              (rgb &amp;quot;yellow&amp;quot;)
-                              (rgb &amp;quot;green&amp;quot;)
-                              (rgb &amp;quot;blue&amp;quot;)
-                              (rgb &amp;quot;violet&amp;quot;))
+       for (from to) on (list (rgb &quot;red&quot;)
+                              (rgb &quot;orange&quot;)
+                              (rgb &quot;yellow&quot;)
+                              (rgb &quot;green&quot;)
+                              (rgb &quot;blue&quot;)
+                              (rgb &quot;violet&quot;))
        while to
        for start from start           by range
        for next  from (+ start range) by range
@@ -1159,158 +1159,158 @@ enough that you won&#039;t even see the result of your settings.&amp;lt;/p&amp;g
 (progn (font-lock-mode -1)
        (rainbow (point-min) (point-max)))

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;/img&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/emacs-colors/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/life-saver.html</id><published>2010-10-14T23:48:34+0100</published><updated><iso8601-date/></updated><title type="text">Life Saver</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/articles/lifesaver.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Life Saver&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Libraries and tools to help to the Lisp programmer having to write C++ code.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;emacs-color&amp;quot;&amp;gt;
+&lt;/img&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/emacs-colors/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/life-saver.html</id><published>2010-10-14T23:48:34+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Life Saver</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/articles/lifesaver.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/life-saver.html&quot;&gt;Life Saver&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Libraries and tools to help to the Lisp programmer having to write C++ code.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;emacs-color&quot;&gt;

-&amp;lt;img src=&amp;quot;lifesaver.jpg&amp;quot; class=&amp;quot;floatRight&amp;quot; alt=&amp;quot;A picture of a life saver of the Titanic, the later representing about any C++ project...&amp;quot;&amp;gt;
+&lt;img src=&quot;lifesaver.jpg&quot; class=&quot;floatRight&quot; alt=&quot;A picture of a life saver of the Titanic, the later representing about any C++ project...&quot;&gt;

-&amp;lt;h1&amp;gt;Life Saver &amp;amp;#8212; Help to the Lisp programmer having to write C++ code&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Life Saver &amp;#8212; Help to the Lisp programmer having to write C++ code&lt;/h1&gt;



-&amp;lt;p&amp;gt;If you have to write a program in C++, condolences.&amp;lt;/p&amp;gt;
+&lt;p&gt;If you have to write a program in C++, condolences.&lt;/p&gt;


-&amp;lt;p&amp;gt;Now to relieve the pain somewhat, here are some libraries and tools that may be of use.&amp;lt;/p&amp;gt;
+&lt;p&gt;Now to relieve the pain somewhat, here are some libraries and tools that may be of use.&lt;/p&gt;



-&amp;lt;small&amp;gt;
-&amp;lt;ol&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#openc++&amp;quot;&amp;gt;Metaprogramming: OpenC++&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#lpp&amp;quot;&amp;gt;Sexps and Dynamic Data Structures: Lpp&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#sexp&amp;quot;&amp;gt;Writing Sexp-formated data: Rivest&#039;s SEXP&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#intelib&amp;quot;&amp;gt;Writing Lisp code in C++: InteLib&amp;lt;/a&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#boehmgc&amp;quot;&amp;gt;Garbage Collection: BoehmGC&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ol&amp;gt;
-&amp;lt;/small&amp;gt;
+&lt;small&gt;
+&lt;ol&gt;
+&lt;li&gt;&lt;a href=&quot;#openc++&quot;&gt;Metaprogramming: OpenC++&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;#lpp&quot;&gt;Sexps and Dynamic Data Structures: Lpp&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;#sexp&quot;&gt;Writing Sexp-formated data: Rivest&#039;s SEXP&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;#intelib&quot;&gt;Writing Lisp code in C++: InteLib&lt;/a&gt;
+&lt;li&gt;&lt;a href=&quot;#boehmgc&quot;&gt;Garbage Collection: BoehmGC&lt;/a&gt;&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ol&gt;
+&lt;/small&gt;

-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Colophon: The examples below are taken from the
+&lt;p&gt;&lt;small&gt;Colophon: The examples below are taken from the
 documentations of each of these libraries, and are copyrighted by
 their respective authors.  The diagram is linked directly from the
 OpenC++ site.  The Titanic life saver picture has been ruthelessly
-copied from the web.  The examples are formated with the &amp;lt;a href=&amp;quot;http://www.gnu.org/software/emacs&amp;quot;&amp;gt;GNU emacs&amp;lt;/a&amp;gt;&amp;lt;code&amp;gt;htmlize-region&amp;lt;/code&amp;gt; command.&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
+copied from the web.  The examples are formated with the &lt;a href=&quot;http://www.gnu.org/software/emacs&quot;&gt;GNU emacs&lt;/a&gt;&lt;code&gt;htmlize-region&lt;/code&gt; command.&lt;/small&gt;&lt;/p&gt;






-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;br&amp;gt;&amp;lt;a name=&amp;quot;openc++&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Metaprogramming: OpenC++&amp;lt;/h2&amp;gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;br&gt;&lt;a name=&quot;openc++&quot;&gt;
+&lt;h2&gt;Metaprogramming: OpenC++&lt;/h2&gt;


-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.csg.is.titech.ac.jp/~chiba/openc++.html&amp;quot;&amp;gt;OpenC++&amp;lt;/a&amp;gt;
+&lt;p&gt;&lt;a href=&quot;http://www.csg.is.titech.ac.jp/~chiba/openc++.html&quot;&gt;OpenC++&lt;/a&gt;
 is a pre-processor to C++, which extends C++ with a Meta Object
 Protocol (MOP), which allow you to do metaprogramming in a sane way
-(nothing to do with templates and boost hell).&amp;lt;/p&amp;gt;
+(nothing to do with templates and boost hell).&lt;/p&gt;



-&amp;lt;center&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.csg.is.titech.ac.jp/~chiba/opencxx/html/occ.gif&amp;quot; alt=&amp;quot;[metal-level program .cc] --&amp;gt; &amp;lt;OpenC++ compiler&amp;gt; --&amp;gt; &amp;lt;C++ compiler&amp;gt; --&amp;gt; [C++ module .so],[base-level program .cc] --&amp;gt; [OpenC++ compiler] --&amp;gt; [C++ compiler] --&amp;gt; [object .o]&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;/center&amp;gt;
+&lt;center&gt;
+&lt;img src=&quot;http://www.csg.is.titech.ac.jp/~chiba/opencxx/html/occ.gif&quot; alt=&quot;[metal-level program .cc] --&gt; &lt;OpenC++ compiler&gt; --&gt; &lt;C++ compiler&gt; --&gt; [C++ module .so],[base-level program .cc] --&gt; [OpenC++ compiler] --&gt; [C++ compiler] --&gt; [object .o]&quot;&gt;&lt;/img&gt;
+&lt;/center&gt;



-&amp;lt;blockquote&amp;gt;
-&amp;lt;em&amp;gt;Notice that gcc 4.4.3 on Linux x86_64 can&#039;t compile occ programs:&amp;lt;/em&amp;gt;
-&amp;lt;pre&amp;gt;
-/usr/include/wchar.h:220: parse error before `&amp;quot;wcschr&amp;quot;&#039;
-/usr/include/stdlib.h:525: parse error before `&amp;quot;at_quick_exit&amp;quot;&#039;
+&lt;blockquote&gt;
+&lt;em&gt;Notice that gcc 4.4.3 on Linux x86_64 can&#039;t compile occ programs:&lt;/em&gt;
+&lt;pre&gt;
+/usr/include/wchar.h:220: parse error before `&quot;wcschr&quot;&#039;
+/usr/include/stdlib.h:525: parse error before `&quot;at_quick_exit&quot;&#039;
 /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3
-&amp;lt;/pre&amp;gt;
-&amp;lt;em&amp;gt;We&#039;d probably need to use an older gcc.&amp;lt;/em&amp;gt;
-&amp;lt;/blockquote&amp;gt;
+&lt;/pre&gt;
+&lt;em&gt;We&#039;d probably need to use an older gcc.&lt;/em&gt;
+&lt;/blockquote&gt;




-&amp;lt;p&amp;gt;Meta programs have the same form and syntax as normal C++ program,
-the only syntactic extensions being a &amp;lt;em&amp;gt;metaclass&amp;lt;/em&amp;gt; keyword.
-&amp;lt;p&amp;gt;
+&lt;p&gt;Meta programs have the same form and syntax as normal C++ program,
+the only syntactic extensions being a &lt;em&gt;metaclass&lt;/em&gt; keyword.
+&lt;p&gt;


-&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;VerboseClass.cc&amp;lt;/code&amp;gt;:
+&lt;p&gt;&lt;code&gt;VerboseClass.cc&lt;/code&gt;:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

-&amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;VerboseClass.mc
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;mop.h&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;VerboseClass&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Class&amp;lt;/span&amp;gt; {
-&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;:
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;TranslateMemberCall&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Environment&amp;lt;/span&amp;gt;*, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;*, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;*,
-                               &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;*, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;*);
+&lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;VerboseClass.mc
+&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;mop.h&quot;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;VerboseClass&lt;/span&gt; : &lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;Class&lt;/span&gt; {
+&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;:
+    &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;function-name&quot;&gt;TranslateMemberCall&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;Environment&lt;/span&gt;*, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;*, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;*,
+                               &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;*, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;*);
 };
-&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;VerboseClass&amp;lt;/span&amp;gt;::&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;TranslateMemberCall&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Environment&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;env&amp;lt;/span&amp;gt;,
-                                         &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;object&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;op&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;member&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;* &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;arglist&amp;lt;/span&amp;gt;)
+&lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;constant&quot;&gt;VerboseClass&lt;/span&gt;::&lt;span class=&quot;function-name&quot;&gt;TranslateMemberCall&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;Environment&lt;/span&gt;* &lt;span class=&quot;variable-name&quot;&gt;env&lt;/span&gt;,
+                                         &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;variable-name&quot;&gt;object&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;variable-name&quot;&gt;op&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;variable-name&quot;&gt;member&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;Ptree&lt;/span&gt;* &lt;span class=&quot;variable-name&quot;&gt;arglist&lt;/span&gt;)
 {
-    &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;Ptree&amp;lt;/span&amp;gt;::Make(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;(puts(\&amp;quot;%p()\&amp;quot;), %p)&amp;quot;&amp;lt;/span&amp;gt;,
+    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;Ptree&lt;/span&gt;::Make(&lt;span class=&quot;string&quot;&gt;&quot;(puts(\&quot;%p()\&quot;), %p)&quot;&lt;/span&gt;,
                        member,
-                       &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;Class&amp;lt;/span&amp;gt;::TranslateMemberCall(env, object,
+                       &lt;span class=&quot;constant&quot;&gt;Class&lt;/span&gt;::TranslateMemberCall(env, object,
                                                   op,
                                                   member, arglist));
 }

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;code&amp;gt;person.cc&amp;lt;/code&amp;gt;:
-&amp;lt;pre&amp;gt;
+&lt;code&gt;person.cc&lt;/code&gt;:
+&lt;pre&gt;

-&amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;person.cc
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;stdio.h&amp;amp;gt;&amp;lt;/span&amp;gt;
-metaclass &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;VerboseClass&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;Person&amp;lt;/span&amp;gt;; &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;metaclass declaration
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Person&amp;lt;/span&amp;gt; {
-&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;:
-    &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;Person&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;age&amp;lt;/span&amp;gt;);
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;Age&amp;lt;/span&amp;gt;() { &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; age; }
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;BirthdayComes&amp;lt;/span&amp;gt;() { &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; ++age; }
+&lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;person.cc
+&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
+metaclass &lt;span class=&quot;type&quot;&gt;VerboseClass&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;Person&lt;/span&gt;; &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;metaclass declaration
+&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;Person&lt;/span&gt; {
+&lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;:
+    &lt;span class=&quot;function-name&quot;&gt;Person&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;age&lt;/span&gt;);
+    &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;Age&lt;/span&gt;() { &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; age; }
+    &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;BirthdayComes&lt;/span&gt;() { &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; ++age; }
     2
-    &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;private&amp;lt;/span&amp;gt;:
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; age;
+    &lt;span class=&quot;keyword&quot;&gt;private&lt;/span&gt;:
+    &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; age;
 };
-&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;main&amp;lt;/span&amp;gt;()
+&lt;span class=&quot;function-name&quot;&gt;main&lt;/span&gt;()
 {
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Person&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;billy&amp;lt;/span&amp;gt;(24);
-    printf(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;age %d\n&amp;quot;&amp;lt;/span&amp;gt;, billy.Age());
-    printf(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;age %d\n&amp;quot;&amp;lt;/span&amp;gt;, billy.BirthdayComes());
+    &lt;span class=&quot;type&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;billy&lt;/span&gt;(24);
+    printf(&lt;span class=&quot;string&quot;&gt;&quot;age %d\n&quot;&lt;/span&gt;, billy.Age());
+    printf(&lt;span class=&quot;string&quot;&gt;&quot;age %d\n&quot;&lt;/span&gt;, billy.BirthdayComes());
 }

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


 When compiled with:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

 % occ -m -- -g VerboseClass.mc
 % occ -- -g -o person person.cc

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


 produces:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

 % person
 Age()
@@ -1318,58 +1318,58 @@ age 24
 BirthdayComes()
 age 25

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;p&amp;gt;It also allow to easily define new control structures (patterned after
+&lt;p&gt;It also allow to easily define new control structures (patterned after
 the existing ones) such as:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

 {
-    &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt;;
+    &lt;span class=&quot;type&quot;&gt;Matrix&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;m&lt;/span&gt;;
     m.forall(e){ e = 0.0; }
 }

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;




-&amp;lt;p&amp;gt;Notice that the OpenC++ preprocessor is able to output the syntax
-tree of a C++ source in a processable form!&amp;lt;/p&amp;gt;
+&lt;p&gt;Notice that the OpenC++ preprocessor is able to output the syntax
+tree of a C++ source in a processable form!&lt;/p&gt;



-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

 % myocc -s person.cc
-[&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;typedef&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;char&amp;lt;/span&amp;gt;] [* __gnuc_va_list] ;]
+[&lt;span class=&quot;keyword&quot;&gt;typedef&lt;/span&gt; [&lt;span class=&quot;type&quot;&gt;char&lt;/span&gt;] [* __gnuc_va_list] ;]
     :
     :
 [metaclass VerboseClass Person nil ;]
 [[[class Person nil [{ [
                         [public :]
-                        [nil [Person ( [[[&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;] [i]]] )] [{ [
+                        [nil [Person ( [[[&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt;] [i]]] )] [{ [
                                                             [[age = i] ;]
                                                             ] }]]
-                        [[&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;] [Age ( nil )] [{ [
-                                                 [&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; age ;]
+                        [[&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt;] [Age ( nil )] [{ [
+                                                 [&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; age ;]
                                                  ] }]]
-                        [[&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;] [BirthdayComes ( nil )] [{ [
-                                                           [&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; [++ age] ;]
+                        [[&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt;] [BirthdayComes ( nil )] [{ [
+                                                           [&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; [++ age] ;]
                                                            ] }]]
                         [private :]
-                        [[&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;] [age] ;]
+                        [[&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt;] [age] ;]
                         ] }]]] ;]
 [nil nil [main ( nil )] [{ [
                             [[Person] [billy ( [24] )] ;]
-                            [[printf [( [&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;age %d\n&amp;quot;&amp;lt;/span&amp;gt; , [billy . Age [( nil )]]] )]] ;]
-                            [[printf [( [&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;age %d\n&amp;quot;&amp;lt;/span&amp;gt; , [billy . BirthdayComes ...
+                            [[printf [( [&lt;span class=&quot;string&quot;&gt;&quot;age %d\n&quot;&lt;/span&gt; , [billy . Age [( nil )]]] )]] ;]
+                            [[printf [( [&lt;span class=&quot;string&quot;&gt;&quot;age %d\n&quot;&lt;/span&gt; , [billy . BirthdayComes ...
                                                        ] }]]
 %

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;



@@ -1377,87 +1377,87 @@ tree of a C++ source in a processable form!&amp;lt;/p&amp;gt;



-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;br&amp;gt;&amp;lt;a name=&amp;quot;lpp&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Sexps and Dynamic Data Structures: Lpp&amp;lt;/h2&amp;gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;br&gt;&lt;a name=&quot;lpp&quot;&gt;
+&lt;h2&gt;Sexps and Dynamic Data Structures: Lpp&lt;/h2&gt;


-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.interhack.net/projects/lpp/&amp;quot;&amp;gt;Lpp&amp;lt;/a&amp;gt; is a C++
+&lt;p&gt;&lt;a href=&quot;http://www.interhack.net/projects/lpp/&quot;&gt;Lpp&lt;/a&gt; is a C++
 library of Lisp-like functions and macros, providing the various data
 types commonly found in Lisp, such as symbols, lists, hash-tables,
 etc.

-&amp;lt;blockquote&amp;gt;
-&amp;lt;em&amp;gt;Unfortunately, the latest versions of &amp;lt;b&amp;gt;Lpp&amp;lt;/b&amp;gt; (1.21.2 and
+&lt;blockquote&gt;
+&lt;em&gt;Unfortunately, the latest versions of &lt;b&gt;Lpp&lt;/b&gt; (1.21.2 and
 previous) don&#039;t compile with gcc-4.4.3; there are a lot of missing
-extern declarations...&amp;lt;/em&amp;gt;
-&amp;lt;/blockquote&amp;gt;
+extern declarations...&lt;/em&gt;
+&lt;/blockquote&gt;




-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;/////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;main.cc = Introduction Simple Data Base example.
-&amp;lt;/span&amp;gt;
-&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt;     #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;Lpp.hh&amp;amp;gt;&amp;lt;/span&amp;gt;
+     &lt;span class=&quot;comment-delimiter&quot;&gt;/////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt;     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;main.cc = Introduction Simple Data Base example.
+&lt;/span&gt;
+&lt;span class=&quot;preprocessor&quot;&gt;     #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;Lpp.hh&amp;gt;&lt;/span&gt;

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;Data Base class.
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt; {
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;size&amp;lt;/span&amp;gt;;
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;contents&amp;lt;/span&amp;gt;;
-     &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;:
-       &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;();
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;getSize&amp;lt;/span&amp;gt;() {&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; size;}
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;addEntity&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;);
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;setValue&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;);
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;getValue&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt;);};
+     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Data Base class.
+&lt;/span&gt;     &lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;DataBase&lt;/span&gt; {
+       &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;size&lt;/span&gt;;
+       &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;contents&lt;/span&gt;;
+     &lt;span class=&quot;keyword&quot;&gt;public&lt;/span&gt;:
+       &lt;span class=&quot;function-name&quot;&gt;DataBase&lt;/span&gt;();
+       &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;getSize&lt;/span&gt;() {&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; size;}
+       &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;addEntity&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;);
+       &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;setValue&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;);
+       &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;getValue&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt;);};

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;Data Base constructor.
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;::&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;() {size = 0; contents = makeHashTable();}
+     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Data Base constructor.
+&lt;/span&gt;     &lt;span class=&quot;constant&quot;&gt;DataBase&lt;/span&gt;::&lt;span class=&quot;function-name&quot;&gt;DataBase&lt;/span&gt;() {size = 0; contents = makeHashTable();}

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;Add an entity to the Data Base.
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;::&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;addEntity&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;entity&amp;lt;/span&amp;gt;) {
-       &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;negation-char&amp;quot;&amp;gt;!&amp;lt;/span&amp;gt;gethash(entity, contents)) {
+     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Add an entity to the Data Base.
+&lt;/span&gt;     &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;DataBase&lt;/span&gt;::&lt;span class=&quot;function-name&quot;&gt;addEntity&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;entity&lt;/span&gt;) {
+       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;negation-char&quot;&gt;!&lt;/span&gt;gethash(entity, contents)) {
          puthash(entity, contents, 0);
          size++;}}

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;Set the value of an attribute for given entity.
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;::&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;setValue&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;entity&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;attribute&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;) {
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;attributes&amp;lt;/span&amp;gt; = gethash(entity, contents);
-       &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;old&amp;lt;/span&amp;gt; = assoc(attribute, attributes);
-       &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; (old) rplacd(old, value);
-       &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {
+     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Set the value of an attribute for given entity.
+&lt;/span&gt;     &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;DataBase&lt;/span&gt;::&lt;span class=&quot;function-name&quot;&gt;setValue&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;entity&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;attribute&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;value&lt;/span&gt;) {
+       &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;attributes&lt;/span&gt; = gethash(entity, contents);
+       &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;old&lt;/span&gt; = assoc(attribute, attributes);
+       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (old) rplacd(old, value);
+       &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; {
          push(cons(attribute, value), attributes);
          puthash(entity, contents, attributes);}}

-     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;Return the value of an attribute for given entity.
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;constant&amp;quot;&amp;gt;DataBase&amp;lt;/span&amp;gt;::&amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;getValue&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;entity&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;let&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;attribute&amp;lt;/span&amp;gt;) {
-       &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; cdr(assoc(attribute, gethash(entity, contents)));}
+     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;Return the value of an attribute for given entity.
+&lt;/span&gt;     &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;DataBase&lt;/span&gt;::&lt;span class=&quot;function-name&quot;&gt;getValue&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;entity&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;attribute&lt;/span&gt;) {
+       &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; cdr(assoc(attribute, gethash(entity, contents)));}

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;






-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;br&amp;gt;&amp;lt;a name=&amp;quot;sexp&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Writing Sexp-formated data in C: Rivest&#039;s SEXP&amp;lt;/h2&amp;gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;br&gt;&lt;a name=&quot;sexp&quot;&gt;
+&lt;h2&gt;Writing Sexp-formated data in C: Rivest&#039;s SEXP&lt;/h2&gt;


-&amp;lt;p&amp;gt;Ronald L. Rivest&#039;s &amp;lt;a href=&amp;quot;http://people.csail.mit.edu/rivest/sexp.html&amp;quot;&amp;gt;SEXP&amp;lt;/a&amp;gt;
+&lt;p&gt;Ronald L. Rivest&#039;s &lt;a href=&quot;http://people.csail.mit.edu/rivest/sexp.html&quot;&gt;SEXP&lt;/a&gt;
 format writes and reads data in a sexp-like format, with some provision for binary data.

-&amp;lt;p&amp;gt;It may be a nice alternative to JSON or XML.   Of course, one can
-always read or parse Common Lisp sexps too.&amp;lt;/p&amp;gt;
+&lt;p&gt;It may be a nice alternative to JSON or XML.   Of course, one can
+always read or parse Common Lisp sexps too.&lt;/p&gt;


-&amp;lt;p&amp;gt;A short example:
-&amp;lt;pre&amp;gt;
+&lt;p&gt;A short example:
+&lt;pre&gt;

     (6:issuer3:bob)

@@ -1465,45 +1465,45 @@ always read or parse Common Lisp sexps too.&amp;lt;/p&amp;gt;

     (7:subject(3:ref5:alice6:mother))

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;



-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;br&amp;gt;&amp;lt;a name=&amp;quot;intelib&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Writing Lisp code in C++: InteLib&amp;lt;/h2&amp;gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;br&gt;&lt;a name=&quot;intelib&quot;&gt;
+&lt;h2&gt;Writing Lisp code in C++: InteLib&lt;/h2&gt;


-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.intelib.org/&amp;quot;&amp;gt;InteLib&amp;lt;/a&amp;gt; is a C++ library
+&lt;p&gt;&lt;a href=&quot;http://www.intelib.org/&quot;&gt;InteLib&lt;/a&gt; is a C++ library
 allowing us to write dynamic code, using a subset of C++ syntax similar
 to Lisp syntax, without any preprocessing.
-&amp;lt;p&amp;gt;
+&lt;p&gt;

-&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;isomorph.cpp&amp;lt;/code&amp;gt;:
+&lt;p&gt;&lt;code&gt;isomorph.cpp&lt;/code&gt;:


-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

- &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;//       &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;File isomorph.cpp
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/lisp/lisp.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/lisp/lsymbol.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/lfun_std.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/lfun_sel.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;
+ &lt;span class=&quot;comment-delimiter&quot;&gt;//       &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;File isomorph.cpp
+&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/lisp/lisp.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/lisp/lsymbol.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/lfun_std.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/lfun_sel.hpp&amp;gt;&lt;/span&gt;


- &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LSymbol&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;ISOMORPHIC&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;ISOMORPHIC&amp;quot;&amp;lt;/span&amp;gt;);
+ &lt;span class=&quot;type&quot;&gt;LSymbol&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;ISOMORPHIC&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;ISOMORPHIC&quot;&lt;/span&gt;);

- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionDefun&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;DEFUN&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;DEFUN&amp;quot;&amp;lt;/span&amp;gt;);
- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionCond&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;COND&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;COND&amp;quot;&amp;lt;/span&amp;gt;);
- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionAtom&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;ATOM&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;ATOM&amp;quot;&amp;lt;/span&amp;gt;);
- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionAnd&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;AND&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;AND&amp;quot;&amp;lt;/span&amp;gt;);
- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionCar&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;CAR&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;CAR&amp;quot;&amp;lt;/span&amp;gt;);
- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LFunctionalSymbol&amp;lt;/span&amp;gt;&amp;amp;lt;LFunctionCdr&amp;amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;CDR&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;CDR&amp;quot;&amp;lt;/span&amp;gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionDefun&amp;gt; &lt;span class=&quot;function-name&quot;&gt;DEFUN&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;DEFUN&quot;&lt;/span&gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionCond&amp;gt; &lt;span class=&quot;function-name&quot;&gt;COND&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;COND&quot;&lt;/span&gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionAtom&amp;gt; &lt;span class=&quot;function-name&quot;&gt;ATOM&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;ATOM&quot;&lt;/span&gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionAnd&amp;gt; &lt;span class=&quot;function-name&quot;&gt;AND&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;AND&quot;&lt;/span&gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionCar&amp;gt; &lt;span class=&quot;function-name&quot;&gt;CAR&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;CAR&quot;&lt;/span&gt;);
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LFunctionalSymbol&lt;/span&gt;&amp;lt;LFunctionCdr&amp;gt; &lt;span class=&quot;function-name&quot;&gt;CDR&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;CDR&quot;&lt;/span&gt;);

- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LListConstructor&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;L&amp;lt;/span&amp;gt;;
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LListConstructor&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;L&lt;/span&gt;;

- &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; LispInit_isomorphic() {
-   &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LSymbol&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;TREE1&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;TREE1&amp;quot;&amp;lt;/span&amp;gt;);
-   &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LSymbol&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;TREE2&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;TREE2&amp;quot;&amp;lt;/span&amp;gt;);
-   &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;//&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;   (L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
+ &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; LispInit_isomorphic() {
+   &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LSymbol&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;TREE1&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;TREE1&quot;&lt;/span&gt;);
+   &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LSymbol&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;TREE2&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;TREE2&quot;&lt;/span&gt;);
+   &lt;span class=&quot;comment-delimiter&quot;&gt;////////////////////////////////////////////////&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt;   &lt;span class=&quot;comment-delimiter&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt;   (L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
      (L|COND,
        (L|(L|ATOM, TREE1), (L|ATOM, TREE2)),
        (L|(L|ATOM, TREE2), NIL),
@@ -1513,63 +1513,63 @@ to Lisp syntax, without any preprocessing.
          (L|ISOMORPHIC, (L|CDR, TREE1),
                         (L|CDR, TREE2))
    )))).Evaluate();
-   &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;//&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; }
- &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;//      &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;end of file
-&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;
+   &lt;span class=&quot;comment-delimiter&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt;   &lt;span class=&quot;comment-delimiter&quot;&gt;////////////////////////////////////////////////&lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt; }
+ &lt;span class=&quot;comment-delimiter&quot;&gt;//      &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;end of file
+&lt;/span&gt;&lt;/pre&gt;


-&amp;lt;code&amp;gt;main.cpp&amp;lt;/code&amp;gt;:
+&lt;code&gt;main.cpp&lt;/code&gt;:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

- &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;file main.cpp
-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;stdio.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;stdlib.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/sexpress/sexpress.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/sexpress/sstring.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;preprocessor&amp;quot;&amp;gt; #include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;amp;lt;intelib/lisp/lsymbol.hpp&amp;amp;gt;&amp;lt;/span&amp;gt;
+ &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;file main.cpp
+&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/sexpress/sexpress.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/sexpress/sstring.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;preprocessor&quot;&gt; #include&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;lt;intelib/lisp/lsymbol.hpp&amp;gt;&lt;/span&gt;

- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;extern&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LSymbol&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;ISOMORPHIC&amp;lt;/span&amp;gt;;
- &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;LispInit_isomorphic&amp;lt;/span&amp;gt;();
+ &lt;span class=&quot;keyword&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LSymbol&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;ISOMORPHIC&lt;/span&gt;;
+ &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;LispInit_isomorphic&lt;/span&gt;();

- &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;LListConstructor&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;L&amp;lt;/span&amp;gt;;
+ &lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;LListConstructor&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;L&lt;/span&gt;;

- &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;call_isomorph&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;amp;amp;&amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;l1&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;amp;amp;&amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;l2&amp;lt;/span&amp;gt;)
+ &lt;span class=&quot;type&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;call_isomorph&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &amp;amp;&lt;span class=&quot;variable-name&quot;&gt;l1&lt;/span&gt;, &lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &amp;amp;&lt;span class=&quot;variable-name&quot;&gt;l2&lt;/span&gt;)
  {
-     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;res&amp;lt;/span&amp;gt; = (L|ISOMORPHIC, ~l1, ~l2).Evaluate();
-     printf(&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;%s ~~ %s : %s\n&amp;quot;&amp;lt;/span&amp;gt;,
-            l1-&amp;amp;gt;TextRepresentation().c_str(),
-            l2-&amp;amp;gt;TextRepresentation().c_str(),
-            res-&amp;amp;gt;TextRepresentation().c_str());
+     &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;res&lt;/span&gt; = (L|ISOMORPHIC, ~l1, ~l2).Evaluate();
+     printf(&lt;span class=&quot;string&quot;&gt;&quot;%s ~~ %s : %s\n&quot;&lt;/span&gt;,
+            l1-&amp;gt;TextRepresentation().c_str(),
+            l2-&amp;gt;TextRepresentation().c_str(),
+            res-&amp;gt;TextRepresentation().c_str());
  }

- &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;function-name&amp;quot;&amp;gt;main&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;argc&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;char&amp;lt;/span&amp;gt; *&amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;argv&amp;lt;/span&amp;gt;[])
+ &lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;function-name&quot;&gt;main&lt;/span&gt;(&lt;span class=&quot;type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;argc&lt;/span&gt;, &lt;span class=&quot;type&quot;&gt;char&lt;/span&gt; *&lt;span class=&quot;variable-name&quot;&gt;argv&lt;/span&gt;[])
  {
      LispInit_isomorphic();
-     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;ls1&amp;lt;/span&amp;gt; = (L|(L|1, 2), 3, 4);         &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;((1 2) 3 4)
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;ls2&amp;lt;/span&amp;gt; = (L|(L|&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;b&amp;quot;&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;c&amp;quot;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;d&amp;quot;&amp;lt;/span&amp;gt;); &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;((&amp;quot;a&amp;quot; &amp;quot;b&amp;quot;) &amp;quot;c&amp;quot; &amp;quot;d&amp;quot;)
-&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;SReference&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;variable-name&amp;quot;&amp;gt;ls3&amp;lt;/span&amp;gt; = (L|(L|1, 2), (L|3, 4));     &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;((1 2) (3 4))
-&amp;lt;/span&amp;gt;     call_isomorph(ls1, ls2);
+     &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;ls1&lt;/span&gt; = (L|(L|1, 2), 3, 4);         &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;((1 2) 3 4)
+&lt;/span&gt;     &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;ls2&lt;/span&gt; = (L|(L|&lt;span class=&quot;string&quot;&gt;&quot;a&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;b&quot;&lt;/span&gt;), &lt;span class=&quot;string&quot;&gt;&quot;c&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;d&quot;&lt;/span&gt;); &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;((&quot;a&quot; &quot;b&quot;) &quot;c&quot; &quot;d&quot;)
+&lt;/span&gt;     &lt;span class=&quot;type&quot;&gt;SReference&lt;/span&gt; &lt;span class=&quot;variable-name&quot;&gt;ls3&lt;/span&gt; = (L|(L|1, 2), (L|3, 4));     &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;((1 2) (3 4))
+&lt;/span&gt;     call_isomorph(ls1, ls2);
      call_isomorph(ls1, ls3);
-     &amp;lt;span class=&amp;quot;keyword&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; 0;
+     &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; 0;
  }
- &amp;lt;span class=&amp;quot;comment-delimiter&amp;quot;&amp;gt;// &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;comment&amp;quot;&amp;gt;end of file
-&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;
+ &lt;span class=&quot;comment-delimiter&quot;&gt;// &lt;/span&gt;&lt;span class=&quot;comment&quot;&gt;end of file
+&lt;/span&gt;&lt;/pre&gt;


 Compiled with:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

- g++ -Wall -g isomorph.cpp main.cpp -lintelib -o isomorph &amp;amp;&amp;amp; ./isomorph
+ g++ -Wall -g isomorph.cpp main.cpp -lintelib -o isomorph &amp;&amp; ./isomorph

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


 will produce:

-&amp;lt;pre&amp;gt;
+&lt;pre&gt;

- ((1 2) 3 4) ~~ ((&amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;a&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;b&amp;quot;&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;c&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;string&amp;quot;&amp;gt;&amp;quot;d&amp;quot;&amp;lt;/span&amp;gt;) : T
+ ((1 2) 3 4) ~~ ((&lt;span class=&quot;string&quot;&gt;&quot;a&quot;&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;b&quot;&lt;/span&gt;) &lt;span class=&quot;string&quot;&gt;&quot;c&quot;&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;d&quot;&lt;/span&gt;) : T
  ((1 2) 3 4) ~~ ((1 2) (3 4)) : NIL

-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;



@@ -1577,354 +1577,354 @@ will produce:



-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;br&amp;gt;&amp;lt;a name=&amp;quot;boehmgc&amp;quot;&amp;gt;
-&amp;lt;h2&amp;gt;Garbage Collection: BoehmGC&amp;lt;/h2&amp;gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;br&gt;&lt;a name=&quot;boehmgc&quot;&gt;
+&lt;h2&gt;Garbage Collection: BoehmGC&lt;/h2&gt;


-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.hpl.hp.com/personal/Hans_Boehm/gc/&amp;quot;&amp;gt;BoehmGC&amp;lt;/a&amp;gt;
+&lt;p&gt;&lt;a href=&quot;http://www.hpl.hp.com/personal/Hans_Boehm/gc/&quot;&gt;BoehmGC&lt;/a&gt;
 is probably the most under-used piece of software worldwide.  It
 should be included in any application written in C or C++.

-&amp;lt;/p&amp;gt;
-&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/life-saver.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/cl-types/index.html</id><published>2010-10-10T10:10:10+0100</published><updated><iso8601-date/></updated><title type="text">Graphs of Common Lisp Types</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/graph.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Graphs of Common Lisp Types&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Generate the graph of the Common Lisp type hierarchy in the implementation.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;cl-types&amp;quot;&amp;gt;
-
-&amp;lt;h1&amp;gt;Graphs of Common Lisp Types&amp;lt;/h1&amp;gt;
-
-
-&amp;lt;p&amp;gt;A newbie asked about the types defined in Common Lisp. There was a
+&lt;/p&gt;
+&lt;/a&gt;&lt;/br&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/a&gt;&lt;/br&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/a&gt;&lt;/br&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/a&gt;&lt;/br&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/a&gt;&lt;/br&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/life-saver.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/cl-types/index.html</id><published>2010-10-10T10:10:10+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Graphs of Common Lisp Types</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/graph.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/cl-types/index.html&quot;&gt;Graphs of Common Lisp Types&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Generate the graph of the Common Lisp type hierarchy in the implementation.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;cl-types&quot;&gt;
+
+&lt;h1&gt;Graphs of Common Lisp Types&lt;/h1&gt;
+
+
+&lt;p&gt;A newbie asked about the types defined in Common Lisp. There was a
 nice graph of Common Lisp types published some times, but despite my
 google-foo, I couldn&#039;t find it again.  It&#039;s not the first time.  So I
-decided to write a little quick &amp;amp;amp; dirty program to build those
-graphs by introspecting the Common Lisp implementation.&amp;lt;/p&amp;gt;
+decided to write a little quick &amp;amp; dirty program to build those
+graphs by introspecting the Common Lisp implementation.&lt;/p&gt;


-&amp;lt;p&amp;gt;Notice that the graph of type hierarchy depends on the
+&lt;p&gt;Notice that the graph of type hierarchy depends on the
 implementation, because some type relationships are left to the
 implementations to be defined (eg. the subtypes of FLOAT may all be
 the same, or all distinct, or some combination as long as some order
-on the significant bits they have).&amp;lt;/p&amp;gt;
+on the significant bits they have).&lt;/p&gt;


-&amp;lt;p&amp;gt;So here is the code of
-&amp;lt;a href=&amp;quot;cl-types-graph.lisp&amp;quot;&amp;gt;cl-types-graph.lisp&amp;lt;/a&amp;gt; which gets all the
+&lt;p&gt;So here is the code of
+&lt;a href=&quot;cl-types-graph.lisp&quot;&gt;cl-types-graph.lisp&lt;/a&gt; which gets all the
 symbols exported from the COMMON-LISP package, and check their subtype
-relationships.&amp;lt;/p&amp;gt;
+relationships.&lt;/p&gt;


-&amp;lt;p&amp;gt;In the case of some implementations such as Clozure or SBCL, any
+&lt;p&gt;In the case of some implementations such as Clozure or SBCL, any
 symbol denotes a type, so is integrated to the graph, between the NIL
-and T types.  This is not meaningful, so we remove them.&amp;lt;/p&amp;gt;
+and T types.  This is not meaningful, so we remove them.&lt;/p&gt;


-&amp;lt;p&amp;gt;Equivalent type names are drawn in a single box labelled by a list
-containing all the equivalent type names.&amp;lt;/p&amp;gt;
+&lt;p&gt;Equivalent type names are drawn in a single box labelled by a list
+containing all the equivalent type names.&lt;/p&gt;


-&amp;lt;p&amp;gt;Finally, notice that we only consider here the types denoted by a
+&lt;p&gt;Finally, notice that we only consider here the types denoted by a
 single symbol.   The
-&amp;lt;a href=&amp;quot;http://www.lispworks.com/documentation/HyperSpec/Front/index.htm&amp;quot;&amp;gt;
-Common Lisp standard&amp;lt;/a&amp;gt; actually defines families of types denoted by sexps,
-such as &amp;lt;code&amp;gt;(vector 42 single-float)&amp;lt;/code&amp;gt;.
+&lt;a href=&quot;http://www.lispworks.com/documentation/HyperSpec/Front/index.htm&quot;&gt;
+Common Lisp standard&lt;/a&gt; actually defines families of types denoted by sexps,
+such as &lt;code&gt;(vector 42 single-float)&lt;/code&gt;.

-&amp;lt;p&amp;gt;The graph thus obtained is written as a &amp;lt;a href=&amp;quot;http://www.graphviz.org/&amp;quot;&amp;gt;Graphviz&amp;lt;/a&amp;gt; &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; file and
-graphviz &amp;lt;code&amp;gt;tred&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt; are used to generate
-the graph image. For example: &amp;lt;/p&amp;gt;
+&lt;p&gt;The graph thus obtained is written as a &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt; &lt;code&gt;dot&lt;/code&gt; file and
+graphviz &lt;code&gt;tred&lt;/code&gt; and &lt;code&gt;dot&lt;/code&gt; are used to generate
+the graph image. For example: &lt;/p&gt;


-&amp;lt;pre&amp;gt;
-    clall &#039;(load &amp;quot;cl-types-graph.lisp&amp;quot;)&#039;
+&lt;pre&gt;
+    clall &#039;(load &quot;cl-types-graph.lisp&quot;)&#039;
     for f in cl-types-in-*.dot ; do
-       tred &amp;amp;lt; $f |dot -Tps /dev/stdin &amp;amp;gt; ${f/.dot/.ps}
+       tred &amp;lt; $f |dot -Tps /dev/stdin &amp;gt; ${f/.dot/.ps}
     done
     for f in  cl-types-in-*.ps ; do
-       gsview $f &amp;amp;amp;
+       gsview $f &amp;amp;
     done
-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;


-&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;clall&amp;lt;/code&amp;gt; can be get from &amp;lt;a href=&amp;quot;http://tinyurl.com/2urswh9&amp;quot;&amp;gt;here&amp;lt;/a&amp;gt; in &amp;lt;a href=&amp;quot;http://git.informatimago.com/viewgit/index.php?a=summary&amp;amp;p=public/bin&amp;quot;&amp;gt;http://git.informatimago.com/viewgit/index.php?a=summary&amp;amp;amp;p=public/bin&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
+&lt;p&gt;&lt;code&gt;clall&lt;/code&gt; can be get from &lt;a href=&quot;http://tinyurl.com/2urswh9&quot;&gt;here&lt;/a&gt; in &lt;a href=&quot;http://git.informatimago.com/viewgit/index.php?a=summary&amp;p=public/bin&quot;&gt;http://git.informatimago.com/viewgit/index.php?a=summary&amp;amp;p=public/bin&lt;/a&gt;.&lt;/p&gt;



-&amp;lt;p&amp;gt;Finally, you can get the generated graphs to compare the type
-hierarchy of these various implementations:&amp;lt;/p&amp;gt;
+&lt;p&gt;Finally, you can get the generated graphs to compare the type
+hierarchy of these various implementations:&lt;/p&gt;


-&amp;lt;table&amp;gt;
+&lt;table&gt;


-&amp;lt;tr&amp;gt;
-&amp;lt;th&amp;gt;clisp 2.48&amp;lt;/th&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-clisp.dot&amp;quot;&amp;gt;cl-types-in-clisp.dot&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-clisp.ps&amp;quot;&amp;gt;cl-types-in-clisp.ps&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;/tr&amp;gt;
+&lt;tr&gt;
+&lt;th&gt;clisp 2.48&lt;/th&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-clisp.dot&quot;&gt;cl-types-in-clisp.dot&lt;/a&gt;&lt;/td&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-clisp.ps&quot;&gt;cl-types-in-clisp.ps&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;


-&amp;lt;tr&amp;gt;
-&amp;lt;th&amp;gt;Clozure Common Lisp 1.5&amp;lt;/th&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-clozure-common-lisp.dot&amp;quot;&amp;gt;cl-types-in-clozure-common-lisp.dot&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-clozure-common-lisp.ps&amp;quot;&amp;gt;cl-types-in-clozure-common-lisp.ps&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;/tr&amp;gt;
+&lt;tr&gt;
+&lt;th&gt;Clozure Common Lisp 1.5&lt;/th&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-clozure-common-lisp.dot&quot;&gt;cl-types-in-clozure-common-lisp.dot&lt;/a&gt;&lt;/td&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-clozure-common-lisp.ps&quot;&gt;cl-types-in-clozure-common-lisp.ps&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;


-&amp;lt;tr&amp;gt;
-&amp;lt;th&amp;gt;ecl 9.12.3&amp;lt;/th&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-ecl.dot&amp;quot;&amp;gt;cl-types-in-ecl.dot&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-ecl.ps&amp;quot;&amp;gt;cl-types-in-ecl.ps&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;/tr&amp;gt;
+&lt;tr&gt;
+&lt;th&gt;ecl 9.12.3&lt;/th&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-ecl.dot&quot;&gt;cl-types-in-ecl.dot&lt;/a&gt;&lt;/td&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-ecl.ps&quot;&gt;cl-types-in-ecl.ps&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;


-&amp;lt;tr&amp;gt;
-&amp;lt;th&amp;gt;SBCL 1.0.19-gentoo&amp;lt;/th&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-sbcl.dot&amp;quot;&amp;gt;cl-types-in-sbcl.dot&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;cl-types-in-sbcl.ps&amp;quot;&amp;gt;cl-types-in-sbcl.ps&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
-&amp;lt;/tr&amp;gt;
+&lt;tr&gt;
+&lt;th&gt;SBCL 1.0.19-gentoo&lt;/th&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-sbcl.dot&quot;&gt;cl-types-in-sbcl.dot&lt;/a&gt;&lt;/td&gt;
+&lt;td&gt;&lt;a href=&quot;cl-types-in-sbcl.ps&quot;&gt;cl-types-in-sbcl.ps&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;


-&amp;lt;/table&amp;gt;
+&lt;/table&gt;


-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/cl-types/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html</id><published>2010-09-08T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">A Simple Sexp Structure Editor</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/sedit.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;A Simple Sexp Structure Editor&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A simple sexp structure editor to demonstrate how we can edit lisp sources directly.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Common Lisp, Lisp, Sexp, Editor, Structure Editor&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;sedit&amp;quot;&amp;gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/cl-types/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html</id><published>2010-09-08T12:00:00+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">A Simple Sexp Structure Editor</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/sedit.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html&quot;&gt;A Simple Sexp Structure Editor&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A simple sexp structure editor to demonstrate how we can edit lisp sources directly.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Common Lisp, Lisp, Sexp, Editor, Structure Editor&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;sedit&quot;&gt;


-&amp;lt;h1&amp;gt;A Simple Sexp Structure Editor&amp;lt;/h1&amp;gt;
+&lt;h1&gt;A Simple Sexp Structure Editor&lt;/h1&gt;




-&amp;lt;p&amp;gt;This is a simple sexp structure editor to demonstrate how we can
+&lt;p&gt;This is a simple sexp structure editor to demonstrate how we can
      edit lisp sources directly instead of going thru the
      deserialization and serialization (converting the sexps into a
      textual representation and using a text editor such as emacs).
-&amp;lt;p&amp;gt;
+&lt;p&gt;


-&amp;lt;p&amp;gt;This editor manipulates directly the sexp data structure.&amp;lt;/p&amp;gt;
+&lt;p&gt;This editor manipulates directly the sexp data structure.&lt;/p&gt;




-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;sedit.lisp&amp;quot;&amp;gt;sedit.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;sedit.lisp&quot;&gt;sedit.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;





-&amp;lt;p&amp;gt;It is invoked as (sedit sexp), and returns the modified sexp.
-     (The sexp is modified destructively).&amp;lt;/p&amp;gt;
+&lt;p&gt;It is invoked as (sedit sexp), and returns the modified sexp.
+     (The sexp is modified destructively).&lt;/p&gt;



-&amp;lt;pre class=&amp;quot;command&amp;quot;&amp;gt;
+&lt;pre class=&quot;command&quot;&gt;
  (sedit (copy-tree &#039;(an example)))
-  &amp;lt;/pre&amp;gt;
+  &lt;/pre&gt;



-&amp;lt;p&amp;gt;At each interaction loop, it prints the whole sexp, showing the selected
-    sub-sexp, and query a command. The list of commands are:&amp;lt;/p&amp;gt;
+&lt;p&gt;At each interaction loop, it prints the whole sexp, showing the selected
+    sub-sexp, and query a command. The list of commands are:&lt;/p&gt;



-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; q quit               &amp;lt;/tt&amp;gt; to return the modified sexp from sedit.
+&lt;li&gt;&lt;tt&gt; q quit               &lt;/tt&gt; to return the modified sexp from sedit.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; i in                 &amp;lt;/tt&amp;gt; to enter inside the selected list.
+&lt;li&gt;&lt;tt&gt; i in                 &lt;/tt&gt; to enter inside the selected list.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; o out                &amp;lt;/tt&amp;gt; to select the list containing the selection.
+&lt;li&gt;&lt;tt&gt; o out                &lt;/tt&gt; to select the list containing the selection.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; f forward n next     &amp;lt;/tt&amp;gt; to select the sexp following the selection (or out).
+&lt;li&gt;&lt;tt&gt; f forward n next     &lt;/tt&gt; to select the sexp following the selection (or out).

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; b backward p previous&amp;lt;/tt&amp;gt; to select the sexp preceding the selection (or out).
+&lt;li&gt;&lt;tt&gt; b backward p previous&lt;/tt&gt; to select the sexp preceding the selection (or out).

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; s insert             &amp;lt;/tt&amp;gt; to insert a new sexp before the selection.
+&lt;li&gt;&lt;tt&gt; s insert             &lt;/tt&gt; to insert a new sexp before the selection.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; r replace            &amp;lt;/tt&amp;gt; to replace the selection with a new sexp.
+&lt;li&gt;&lt;tt&gt; r replace            &lt;/tt&gt; to replace the selection with a new sexp.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; a add                &amp;lt;/tt&amp;gt; to add a new sexp after the selection.
+&lt;li&gt;&lt;tt&gt; a add                &lt;/tt&gt; to add a new sexp after the selection.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; x cut                &amp;lt;/tt&amp;gt; to cut the selection into a *clipboard*.
+&lt;li&gt;&lt;tt&gt; x cut                &lt;/tt&gt; to cut the selection into a *clipboard*.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; c copy               &amp;lt;/tt&amp;gt; to copy the selection into a *clipboard*.
+&lt;li&gt;&lt;tt&gt; c copy               &lt;/tt&gt; to copy the selection into a *clipboard*.

-&amp;lt;li&amp;gt;&amp;lt;tt&amp;gt; y paste              &amp;lt;/tt&amp;gt; to paste the *clipboard* replacing the selection.
-  &amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
+&lt;li&gt;&lt;tt&gt; y paste              &lt;/tt&gt; to paste the *clipboard* replacing the selection.
+  &lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ul&gt;



   Example:

-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
+&lt;pre class=&quot;dribble&quot;&gt;

-C/IBCL-USER[4]&amp;amp;gt; (sedit &#039;())
+C/IBCL-USER[4]&amp;gt; (sedit &#039;())

 Sexp Editor:
-&amp;#227;&amp;#128;&amp;#144;NIL&amp;#227;&amp;#128;&amp;#145;
-&amp;amp;gt; r
+【NIL】
+&amp;gt; r
 replacement sexp: (let ((*package #.*package*)) (print &#039;hello))
-&amp;#227;&amp;#128;&amp;#144;(LET ((*PACKAGE #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)) (PRINT (QUOTE HELLO)))&amp;#227;&amp;#128;&amp;#145;
-&amp;amp;gt; i
-(&amp;#227;&amp;#128;&amp;#144;LET&amp;#227;&amp;#128;&amp;#145; ((*PACKAGE #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)) (PRINT (QUOTE HELLO)))
-&amp;amp;gt; n
-(LET &amp;#227;&amp;#128;&amp;#144;((*PACKAGE #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;))&amp;#227;&amp;#128;&amp;#145; (PRINT (QUOTE HELLO)))
-&amp;amp;gt; i
-(LET (&amp;#227;&amp;#128;&amp;#144;(*PACKAGE #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)&amp;#227;&amp;#128;&amp;#145;) (PRINT (QUOTE HELLO)))
-&amp;amp;gt; i
-(LET ((&amp;#227;&amp;#128;&amp;#144;*PACKAGE&amp;#227;&amp;#128;&amp;#145; #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)) (PRINT (QUOTE HELLO)))
-&amp;amp;gt; r
+【(LET ((*PACKAGE #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)) (PRINT (QUOTE HELLO)))】
+&amp;gt; i
+(【LET】 ((*PACKAGE #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)) (PRINT (QUOTE HELLO)))
+&amp;gt; n
+(LET 【((*PACKAGE #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;))】 (PRINT (QUOTE HELLO)))
+&amp;gt; i
+(LET (【(*PACKAGE #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)】) (PRINT (QUOTE HELLO)))
+&amp;gt; i
+(LET ((【*PACKAGE】 #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)) (PRINT (QUOTE HELLO)))
+&amp;gt; r
 replacement sexp: *package*
-(LET ((&amp;#227;&amp;#128;&amp;#144;*PACKAGE*&amp;#227;&amp;#128;&amp;#145; #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)) (PRINT (QUOTE HELLO)))
-&amp;amp;gt; q
-(LET ((*PACKAGE* #&amp;amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;amp;gt;)) (PRINT &#039;HELLO))
-C/IBCL-USER[5]&amp;amp;gt; (eval *)
+(LET ((【*PACKAGE*】 #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)) (PRINT (QUOTE HELLO)))
+&amp;gt; q
+(LET ((*PACKAGE* #&amp;lt;PACKAGE IMAGE-BASED-COMMON-LISP-USER&amp;gt;)) (PRINT &#039;HELLO))
+C/IBCL-USER[5]&amp;gt; (eval *)

 HELLO
 HELLO
-C/IBCL-USER[6]&amp;amp;gt;
-
-  &amp;lt;/pre&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html</id><published>2010-07-17T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/rps.png&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A little program implementing Rock, Paper, Scissor style games.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Common Lisp, Lisp, game, Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun, Lisard, Lizard, Spock&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;rpsls&amp;quot;&amp;gt;
+C/IBCL-USER[6]&amp;gt;
+
+  &lt;/pre&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html</id><published>2010-07-17T12:00:00+0100</published><updated>2015-10-26T00:27:49+0100</updated><title type="text">Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/rps.png&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html&quot;&gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A little program implementing Rock, Paper, Scissor style games.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Common Lisp, Lisp, game, Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun, Lisard, Lizard, Spock&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;rpsls&quot;&gt;


-&amp;lt;h1&amp;gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun&lt;/h1&gt;




-&amp;lt;p&amp;gt;This little program implements Rock, Paper, Scissor style games.&amp;lt;/p&amp;gt;
+&lt;p&gt;This little program implements Rock, Paper, Scissor style games.&lt;/p&gt;



-&amp;lt;p&amp;gt;Graphs are defined for:&amp;lt;/p&amp;gt;
+&lt;p&gt;Graphs are defined for:&lt;/p&gt;



-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;Rock, Paper, Scissor;&amp;lt;/li&amp;gt;
+&lt;li&gt;Rock, Paper, Scissor;&lt;/li&gt;



-&amp;lt;li&amp;gt;Rock, Paper, Scissor, Lizard, Spock; and&amp;lt;/li&amp;gt;
+&lt;li&gt;Rock, Paper, Scissor, Lizard, Spock; and&lt;/li&gt;



-&amp;lt;li&amp;gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun. (see the &amp;lt;a href=&amp;quot;rpsls-25.jpg&amp;quot;&amp;gt;table&amp;lt;/a&amp;gt;)&amp;lt;/li&amp;gt;
+&lt;li&gt;Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun. (see the &lt;a href=&quot;rpsls-25.jpg&quot;&gt;table&lt;/a&gt;)&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;




-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;rpsls.lisp&amp;quot;&amp;gt;rpsls.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;rpsls.lisp&quot;&gt;rpsls.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;




-&amp;lt;p&amp;gt;Example:&amp;lt;/p&amp;gt;
+&lt;p&gt;Example:&lt;/p&gt;



-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
-CL-USER&amp;amp;gt; (RPSLS:main RPSLS::*rock-paper-scissors-gun-dynamite-nuke-lightning-devil-dragon-alien-water-bowl-air-moon-sponge-wolf-cockroach-tree-man-woman-monkey-snake-axe-fire-sun*)
+&lt;pre class=&quot;dribble&quot;&gt;
+CL-USER&amp;gt; (RPSLS:main RPSLS::*rock-paper-scissors-gun-dynamite-nuke-lightning-devil-dragon-alien-water-bowl-air-moon-sponge-wolf-cockroach-tree-man-woman-monkey-snake-axe-fire-sun*)
 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; air
+&amp;gt; air
 You chose AIR.
 Computer chose MAN.
 Man breathes air.
@@ -1932,7 +1932,7 @@ Therefore you lose.

 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; man
+&amp;gt; man
 You chose MAN.
 Computer chose MOON.
 Man travels to moon.
@@ -1940,7 +1940,7 @@ Therefore you win.

 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; moon
+&amp;gt; moon
 You chose MOON.
 Computer chose WATER.
 Moon has no water.
@@ -1948,7 +1948,7 @@ Therefore you win.

 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; water
+&amp;gt; water
 You chose WATER.
 Computer chose WOLF.
 Wolf drinks water.
@@ -1956,7 +1956,7 @@ Therefore you lose.

 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; wolf
+&amp;gt; wolf
 You chose WOLF.
 Computer chose FIRE.
 Fire burns wolf.
@@ -1964,65 +1964,65 @@ Therefore you lose.

 Please choose an item amongst:
   quit air alien axe bowl cockroach devil dragon dynamite fire gun lightning man monkey moon nuke paper rock scissors snake sponge sun tree water wolf woman
-&amp;amp;gt; quit
+&amp;gt; quit
 You      won 2 of 6 games.
 Computer won 3 of 6 games.
 2
 3
 1
 6
-CL-USER&amp;amp;gt;
-  &amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html</id><published>2010-07-09T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Playtomo Stonedge Game</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/stoneedge.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Playtomo Stonedge Game&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;An implementation of the Playtomo Stonedge Game, and its solver.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Common Lisp, Lisp, game, playtomo, stonedge, solver&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;playtomo-stonedge&amp;quot;&amp;gt;
+CL-USER&amp;gt;
+  &lt;/pre&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html</id><published>2010-07-09T12:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">Playtomo Stonedge Game</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/stoneedge.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html&quot;&gt;Playtomo Stonedge Game&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;An implementation of the Playtomo Stonedge Game, and its solver.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Common Lisp, Lisp, game, playtomo, stonedge, solver&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;playtomo-stonedge&quot;&gt;


-&amp;lt;h1&amp;gt;An implementation of the Playtomo Stonedge game, with its solver&amp;lt;/h1&amp;gt;
+&lt;h1&gt;An implementation of the Playtomo Stonedge game, with its solver&lt;/h1&gt;




-&amp;lt;p&amp;gt;This is an implementation of the Playtomo Stonedge Game, and its
+&lt;p&gt;This is an implementation of the Playtomo Stonedge Game, and its
      solver.
-     See &amp;lt;a href=&amp;quot;http://www.playtomo.com/&amp;quot;&amp;gt;http://www.playtomo.com/&amp;lt;/a&amp;gt;
+     See &lt;a href=&quot;http://www.playtomo.com/&quot;&gt;http://www.playtomo.com/&lt;/a&gt;
      (not much here when I went); Download the playtomo games on
      BlackBerry.



-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;playtomo-stonedge.lisp&amp;quot;&amp;gt;playtomo-stonedge.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;playtomo-stonedge.lisp&quot;&gt;playtomo-stonedge.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;


-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;




-&amp;lt;p&amp;gt;Playtomo&#039;s implementation is nicer (graphical), but here, we
+&lt;p&gt;Playtomo&#039;s implementation is nicer (graphical), but here, we
      provide a solver that will find all the solutions to a given
-     level. &amp;lt;strong&amp;gt;Even nicer!&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
+     level. &lt;strong&gt;Even nicer!&lt;/strong&gt;&lt;/p&gt;




-&amp;lt;pre class=&amp;quot;text&amp;quot;&amp;gt;
+&lt;pre class=&quot;text&quot;&gt;
                   +---+
 block             |BBB|
                   +---+
@@ -2042,32 +2042,32 @@ closed door       | / |
                   +---+
 open door         |---|
                   +---+
-&amp;lt;/pre&amp;gt;
+&lt;/pre&gt;





-&amp;lt;p&amp;gt;To move the block, use:&amp;lt;/p&amp;gt;
+&lt;p&gt;To move the block, use:&lt;/p&gt;



-&amp;lt;pre class=&amp;quot;text&amp;quot;&amp;gt;
+&lt;pre class=&quot;text&quot;&gt;
       8           i
     4   6   or  j   l
       2           k
-  &amp;lt;/pre&amp;gt;
+  &lt;/pre&gt;





-&amp;lt;p&amp;gt;Example:&amp;lt;/p&amp;gt;
+&lt;p&gt;Example:&lt;/p&gt;



-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
-CL-USER&amp;amp;gt; (stonedge *level-39*)
+&lt;pre class=&quot;dribble&quot;&gt;
+CL-USER&amp;gt; (stonedge *level-39*)
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
@@ -2882,7 +2882,7 @@ Your move: 2
 You win!

 ; No value
-CL-USER&amp;amp;gt; (solve-problem *level-39*)
+CL-USER&amp;gt; (solve-problem *level-39*)

 (NUMBER OF STATES = 990)
 ((:WIN 10 5 10 5 :CLOSED :CLOSED :CLOSED :CLOSED :CLOSED :CLOSED :OPEN)
@@ -2906,86 +2906,86 @@ Run time: 0.288956 sec.
 Space: 6520144 Bytes
 GC: 1, GC time: 0.009999 sec.
 NIL
-CL-USER&amp;amp;gt;
-  &amp;lt;/pre&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/ffn=-n/index.html</id><published>2008-03-09T11:00:00+0100</published><updated><iso8601-date/></updated><title type="text">f(f(n)) = -n</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/ffn=-n.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;f(f(n)) = -n&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A function f on 32-bit integers that, when applied twice, negates the integer. f(f(n)) = -n.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;ffn=-n&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;f(f(n)) = -n&amp;lt;/h1&amp;gt;
+CL-USER&amp;gt;
+  &lt;/pre&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/ffn=-n/index.html</id><published>2008-03-09T11:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">f(f(n)) = -n</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/ffn=-n.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/ffn=-n/index.html&quot;&gt;f(f(n)) = -n&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A function f on 32-bit integers that, when applied twice, negates the integer. f(f(n)) = -n.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;ffn=-n&quot;&gt;
+&lt;h1&gt;f(f(n)) = -n&lt;/h1&gt;


-&amp;lt;p&amp;gt;In a comment to Steve Yegge&#039;s blog &amp;lt;a href=&amp;quot;http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&amp;quot;&amp;gt;
-   http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&amp;lt;/a&amp;gt;,&amp;lt;/p&amp;gt;
+&lt;p&gt;In a comment to Steve Yegge&#039;s blog &lt;a href=&quot;http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&quot;&gt;
+   http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&lt;/a&gt;,&lt;/p&gt;


-&amp;lt;blockquote&amp;gt;
+&lt;blockquote&gt;



-&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;http://www.blogger.com/profile/13466586996802181998&amp;quot;&amp;gt;Vlad Patryshev&amp;lt;/a&amp;gt; said...&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
+&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogger.com/profile/13466586996802181998&quot;&gt;Vlad Patryshev&lt;/a&gt; said...&lt;/b&gt;&lt;/p&gt;



-&amp;lt;p&amp;gt;Tactically, you are very right. Strategically... I don&#039;t know. You
+&lt;p&gt;Tactically, you are very right. Strategically... I don&#039;t know. You
        mix two things together, strict typing in general, abuse of UML and
        class hierarchy, and overuse of strict typing where it is not
-       necessary (I mean JavaScript).&amp;lt;/p&amp;gt;
+       necessary (I mean JavaScript).&lt;/p&gt;



-&amp;lt;p&amp;gt;Regarding class structures - it&#039;s probably hard to force people
+&lt;p&gt;Regarding class structures - it&#039;s probably hard to force people
        that love bureaucracy not to fill their code with Managers,
        Handlers, Helpers, and the like (none of these does any work, but
        they pass it around, like in real life). But I&#039;m afraid this
        anti-bureaucratic rant has nothing to do with the issue of modeling
-       in general.&amp;lt;/p&amp;gt;
+       in general.&lt;/p&gt;



-&amp;lt;p&amp;gt;I&#039;ll give you one example, an interview problem. Write a function f
+&lt;p&gt;I&#039;ll give you one example, an interview problem. Write a function f
        on 32-bit integers that, applied twice, it negates the
-       integer. f(f(n)) = -n.&amp;lt;/p&amp;gt;
+       integer. f(f(n)) = -n.&lt;/p&gt;



-&amp;lt;p&amp;gt;Try to solve it without any kind of model, by just applying
-       randomly ad-hoc xors and shifts.&amp;lt;/p&amp;gt;
+&lt;p&gt;Try to solve it without any kind of model, by just applying
+       randomly ad-hoc xors and shifts.&lt;/p&gt;



-&amp;lt;p&amp;gt;9:00 PM, February 11, 2008&amp;lt;/p&amp;gt;
+&lt;p&gt;9:00 PM, February 11, 2008&lt;/p&gt;


-&amp;lt;/blockquote&amp;gt;
+&lt;/blockquote&gt;



-&amp;lt;p&amp;gt;Assuming Vlad means integers represented in two-complement, which
+&lt;p&gt;Assuming Vlad means integers represented in two-complement, which
    is the case with 99% of the processors nowadays, such a function
-   just doesn&#039;t exist. Here&#039;s the mathematical proof.&amp;lt;/p&amp;gt;
+   just doesn&#039;t exist. Here&#039;s the mathematical proof.&lt;/p&gt;


-&amp;lt;p&amp;gt;First, in &amp;#226;&amp;#132;&amp;#164;, such functions indeed exist. For example:&amp;lt;/p&amp;gt;
+&lt;p&gt;First, in ℤ, such functions indeed exist. For example:&lt;/p&gt;


-&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
+&lt;pre&gt;&lt;code&gt;
     (defun integer/f (n)
-      &amp;quot;
+      &quot;
     Assuming n is an INTEGER, (= (- n) (f (f n)))
-         0 --&amp;gt;  0
-        +1 --&amp;gt; -2 --&amp;gt; -1 --&amp;gt; +2 --&amp;gt; +1
-        +3 --&amp;gt; -4 --&amp;gt; -3 --&amp;gt; +4 --&amp;gt; +3
+         0 --&gt;  0
+        +1 --&gt; -2 --&gt; -1 --&gt; +2 --&gt; +1
+        +3 --&gt; -4 --&gt; -3 --&gt; +4 --&gt; +3
         ...
-        +(2k+1) --&amp;gt; -(2k+2) --&amp;gt; -(2k+1) --&amp;gt; +(2k+2) --&amp;gt; +(2k+1)
-    &amp;quot;
+        +(2k+1) --&gt; -(2k+2) --&gt; -(2k+1) --&gt; +(2k+2) --&gt; +(2k+1)
+    &quot;
       (declare (type integer n))
       (if (zerop n)
           0
@@ -2996,190 +2996,190 @@ CL-USER&amp;amp;gt;
               (if(oddp n)
                   (1+ (- n))
                   (1+ n)))))
-&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;


-&amp;lt;p&amp;gt;The same function works in one-complement representation, too
-   (assuming &amp;lt;code&amp;gt;zerop&amp;lt;/code&amp;gt; indicates both +0 and -0).&amp;lt;/p&amp;gt;
+&lt;p&gt;The same function works in one-complement representation, too
+   (assuming &lt;code&gt;zerop&lt;/code&gt; indicates both +0 and -0).&lt;/p&gt;




-&amp;lt;p&amp;gt;But things are different in &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;m&amp;lt;/sub&amp;gt;, because of the special
-   properties of the negation in these sets.&amp;lt;/p&amp;gt;
+&lt;p&gt;But things are different in ℤ/&lt;sub&gt;m&lt;/sub&gt;, because of the special
+   properties of the negation in these sets.&lt;/p&gt;


-&amp;lt;p&amp;gt;When m=2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; with p&amp;gt;2:&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Let i be the identity function:  &amp;#226;&amp;#136;&amp;#128; a &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;m&amp;lt;/sub&amp;gt;, i(a)=a
-&amp;lt;p&amp;gt;Let n be the negation function in two-complement on
-   &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;. n is defined as: n(x) = 1+(&amp;#194;&amp;#172;x), with &amp;#194;&amp;#172;x
-   being the bitwise not operation.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Here are some properties of n:
-&amp;lt;ol&amp;gt;
-&amp;lt;li&amp;gt;n(0)=0
-&amp;lt;li&amp;gt;let M = -2&amp;lt;sup&amp;gt;p-1&amp;lt;/sup&amp;gt;.  In two-complement arithmetic, n(M)=M.
-&amp;lt;li&amp;gt;&amp;#226;&amp;#136;&amp;#128; a &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;&amp;#226;&amp;#136;&amp;#150;{0, M}, n(a)&amp;#226;&amp;#137;&amp;#160;a
-&amp;lt;li&amp;gt;&amp;#226;&amp;#136;&amp;#128; a &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;, n(n(a))=a ; n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = i
-&amp;lt;li&amp;gt;&amp;#226;&amp;#136;&amp;#128; (a,b) &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;,
-    n(a)=n(b) &amp;#226;&amp;#135;&amp;#146; a=b (trivially deduced from 4.)
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ol&amp;gt;
-&amp;lt;/p&amp;gt;
+&lt;p&gt;When m=2&lt;sup&gt;p&lt;/sup&gt; with p&gt;2:&lt;/p&gt;
+&lt;p&gt;Let i be the identity function:  ∀ a ∈ ℤ/&lt;sub&gt;m&lt;/sub&gt;, i(a)=a
+&lt;p&gt;Let n be the negation function in two-complement on
+   ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;. n is defined as: n(x) = 1+(¬x), with ¬x
+   being the bitwise not operation.&lt;/p&gt;
+&lt;p&gt;Here are some properties of n:
+&lt;ol&gt;
+&lt;li&gt;n(0)=0
+&lt;li&gt;let M = -2&lt;sup&gt;p-1&lt;/sup&gt;.  In two-complement arithmetic, n(M)=M.
+&lt;li&gt;∀ a ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;∖{0, M}, n(a)≠a
+&lt;li&gt;∀ a ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;, n(n(a))=a ; n&lt;sup&gt;2&lt;/sup&gt; = i
+&lt;li&gt;∀ (a,b) ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt;,
+    n(a)=n(b) ⇒ a=b (trivially deduced from 4.)
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ol&gt;
+&lt;/p&gt;


-&amp;lt;p&amp;gt;Properties 3 and 4 allow partitionning
-&amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;&amp;#226;&amp;#136;&amp;#150;{0, M} in two symetrical subsets, one
+&lt;p&gt;Properties 3 and 4 allow partitionning
+ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;∖{0, M} in two symetrical subsets, one
 representing the positive integers, and the other their opposite
-negative integers.&amp;lt;/p&amp;gt;
-
-
-&amp;lt;br&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;p&amp;gt;Now, assume there is a function f such as &amp;#226;&amp;#136;&amp;#131; x &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;,  f(f(x))=n(x).&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;Let&#039;s denote the composition of functions by mere juxtaposition: fg = f&amp;#226;&amp;#151;&amp;#139;g.&amp;lt;/p&amp;gt;
-&amp;lt;ul&amp;gt;
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; = i
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = n
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; = nf&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; = f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;n
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; = nf&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; = f&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;n = f
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = i
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
-
-and so on, &amp;#226;&amp;#136;&amp;#128; k &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#149;, f&amp;lt;sup&amp;gt;4k&amp;lt;/sup&amp;gt;=i, f&amp;lt;sup&amp;gt;4k+1&amp;lt;/sup&amp;gt;=f, f&amp;lt;sup&amp;gt;4k+2&amp;lt;/sup&amp;gt;=n, f&amp;lt;sup&amp;gt;4k+3&amp;lt;/sup&amp;gt;=nf.
-
-&amp;lt;p&amp;gt;Let C be the function from &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt; to
-2&amp;lt;sup&amp;gt;&amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;&amp;lt;/sup&amp;gt; such as:
-C(x) = { f&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;(x), f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(x),
-         f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(x), f&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(x) }&amp;lt;/p&amp;gt;
-
-
-&amp;lt;p&amp;gt;Now, let (a,b) &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, such as
-   a &amp;#226;&amp;#136;&amp;#137; {0, M}, f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(a)=n(a) and b &amp;#226;&amp;#136;&amp;#137; C(a) [H]&amp;lt;/p&amp;gt;
-
-
-&amp;lt;p&amp;gt;Since a &amp;#226;&amp;#136;&amp;#137; {0, M} and f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(a)=n(a), | C(a) | = 4.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;And:
-&amp;lt;ul&amp;gt;
-&amp;lt;li&amp;gt;b = f&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;(b) &amp;#226;&amp;#137;&amp;#160; a, by hypothesis [H].
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(b) &amp;#226;&amp;#137;&amp;#160; a, since by hypothesis [H], b &amp;#226;&amp;#137;&amp;#160; f&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(a).
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(b) &amp;#226;&amp;#137;&amp;#160; a, since by hypothesis [H], b &amp;#226;&amp;#137;&amp;#160; f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(a).
-&amp;lt;li&amp;gt;f&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;(b) &amp;#226;&amp;#137;&amp;#160; a, since by hypothesis [H], b &amp;#226;&amp;#137;&amp;#160; f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(a).
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
-&amp;lt;br&amp;gt;in consequence, all the subsets C(x) are disjoint and form a partition of &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;.
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-
-
-&amp;lt;p&amp;gt;However, since C(0) = { 0, f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(0) }, and C(M) = { M,
-f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(M) }, and &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt; is divisible by 4
-when p&amp;gt;2, there is at least two other elements of
-&amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;, let&#039;s call them N and O, such as C(O) = {
-O, f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(O) } and C(N) = { N, f&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;(N) }. &amp;lt;/p&amp;gt;
-
-
-&amp;lt;p&amp;gt;We have f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(O) = O and f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;(N) = N, which shows
-that &amp;#226;&amp;#136;&amp;#131; x &amp;#226;&amp;#136;&amp;#136; &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt;, f(f(x)) &amp;#226;&amp;#137;&amp;#160; -x.
-
-&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Conclusion&amp;lt;/em&amp;gt;: When p&amp;gt;2, there is no function on
-&amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt; such as f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = n.&amp;lt;/p&amp;gt;
+negative integers.&lt;/p&gt;
+
+
+&lt;br&gt;
+&lt;br&gt;
+&lt;p&gt;Now, assume there is a function f such as ∃ x ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;,  f(f(x))=n(x).&lt;/p&gt;
+&lt;p&gt;Let&#039;s denote the composition of functions by mere juxtaposition: fg = f○g.&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;f&lt;sup&gt;0&lt;/sup&gt; = i
+&lt;li&gt;f&lt;sup&gt;2&lt;/sup&gt; = n
+&lt;li&gt;f&lt;sup&gt;3&lt;/sup&gt; = nf&lt;sup&gt;1&lt;/sup&gt; = f&lt;sup&gt;1&lt;/sup&gt;n
+&lt;li&gt;f&lt;sup&gt;1&lt;/sup&gt; = nf&lt;sup&gt;3&lt;/sup&gt; = f&lt;sup&gt;3&lt;/sup&gt;n = f
+&lt;li&gt;f&lt;sup&gt;4&lt;/sup&gt; = n&lt;sup&gt;2&lt;/sup&gt; = i
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ul&gt;
+
+and so on, ∀ k ∈ ℕ, f&lt;sup&gt;4k&lt;/sup&gt;=i, f&lt;sup&gt;4k+1&lt;/sup&gt;=f, f&lt;sup&gt;4k+2&lt;/sup&gt;=n, f&lt;sup&gt;4k+3&lt;/sup&gt;=nf.
+
+&lt;p&gt;Let C be the function from ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt; to
+2&lt;sup&gt;ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;&lt;/sup&gt; such as:
+C(x) = { f&lt;sup&gt;0&lt;/sup&gt;(x), f&lt;sup&gt;1&lt;/sup&gt;(x),
+         f&lt;sup&gt;2&lt;/sup&gt;(x), f&lt;sup&gt;3&lt;/sup&gt;(x) }&lt;/p&gt;
+
+
+&lt;p&gt;Now, let (a,b) ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt;, such as
+   a ∉ {0, M}, f&lt;sup&gt;2&lt;/sup&gt;(a)=n(a) and b ∉ C(a) [H]&lt;/p&gt;
+
+
+&lt;p&gt;Since a ∉ {0, M} and f&lt;sup&gt;2&lt;/sup&gt;(a)=n(a), | C(a) | = 4.&lt;/p&gt;
+&lt;p&gt;And:
+&lt;ul&gt;
+&lt;li&gt;b = f&lt;sup&gt;0&lt;/sup&gt;(b) ≠ a, by hypothesis [H].
+&lt;li&gt;f&lt;sup&gt;1&lt;/sup&gt;(b) ≠ a, since by hypothesis [H], b ≠ f&lt;sup&gt;3&lt;/sup&gt;(a).
+&lt;li&gt;f&lt;sup&gt;2&lt;/sup&gt;(b) ≠ a, since by hypothesis [H], b ≠ f&lt;sup&gt;2&lt;/sup&gt;(a).
+&lt;li&gt;f&lt;sup&gt;3&lt;/sup&gt;(b) ≠ a, since by hypothesis [H], b ≠ f&lt;sup&gt;1&lt;/sup&gt;(a).
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/li&gt;
+&lt;/ul&gt;
+&lt;br&gt;in consequence, all the subsets C(x) are disjoint and form a partition of ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;.
+&lt;/br&gt;
+&lt;/p&gt;
+
+
+&lt;p&gt;However, since C(0) = { 0, f&lt;sup&gt;1&lt;/sup&gt;(0) }, and C(M) = { M,
+f&lt;sup&gt;1&lt;/sup&gt;(M) }, and ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt; is divisible by 4
+when p&gt;2, there is at least two other elements of
+ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;, let&#039;s call them N and O, such as C(O) = {
+O, f&lt;sup&gt;1&lt;/sup&gt;(O) } and C(N) = { N, f&lt;sup&gt;1&lt;/sup&gt;(N) }. &lt;/p&gt;
+
+
+&lt;p&gt;We have f&lt;sup&gt;2&lt;/sup&gt;(O) = O and f&lt;sup&gt;2&lt;/sup&gt;(N) = N, which shows
+that ∃ x ∈ ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt;, f(f(x)) ≠ -x.
+
+&lt;p&gt;&lt;em&gt;Conclusion&lt;/em&gt;: When p&gt;2, there is no function on
+ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt; such as f&lt;sup&gt;2&lt;/sup&gt; = n.&lt;/p&gt;
   At most, we
 can find functions such as f(f(x)) = -x for all elements x of
-&amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;2&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/sub&amp;gt; but for two of our choosing.  Note that we
+ℤ/&lt;sub&gt;2&lt;sup&gt;p&lt;/sup&gt;&lt;/sub&gt; but for two of our choosing.  Note that we
 can choose to break the formula for 0 and M, since -0 is not very
-interesting and -M in two-complement is pathologic anyways.&amp;lt;/p&amp;gt;
+interesting and -M in two-complement is pathologic anyways.&lt;/p&gt;


-&amp;lt;p&amp;gt;(For other sets, &amp;#226;&amp;#132;&amp;#164;/&amp;lt;sub&amp;gt;q&amp;lt;/sub&amp;gt; if q &amp;#226;&amp;#137;&amp;#161; 1 [4] or  q &amp;#226;&amp;#137;&amp;#161; 2 [4],
-then there are functions such as f&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;=n).&amp;lt;/p&amp;gt;
+&lt;p&gt;(For other sets, ℤ/&lt;sub&gt;q&lt;/sub&gt; if q ≡ 1 [4] or  q ≡ 2 [4],
+then there are functions such as f&lt;sup&gt;2&lt;/sup&gt;=n).&lt;/p&gt;



-&amp;lt;p&amp;gt;Finally, we can implement a function that does almost what was
+&lt;p&gt;Finally, we can implement a function that does almost what was
 asked, only with a bug: we get to choose which two values for which
-f(f(x)) &amp;#226;&amp;#137;&amp;#160; -x.
+f(f(x)) ≠ -x.

-&amp;lt;p&amp;gt;But of course, not using only XOR and SHIFT operations!  Using only
+&lt;p&gt;But of course, not using only XOR and SHIFT operations!  Using only
 NAND and SHIFT, it would be possible (since NAND is all is needed to
 build all the boolean operators, but XOR is not powerful enough to do
 so, see Wikipedia articles on
-&amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Logical_connective&amp;quot;&amp;gt;Logical connective&amp;lt;/a&amp;gt;
-or on &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Functional_completeness&amp;quot;&amp;gt;Functional completeness&amp;lt;/a&amp;gt;).
-&amp;lt;/p&amp;gt;
-&amp;lt;blockquote&amp;gt;
-&amp;lt;small&amp;gt;
-
-&amp;lt;p&amp;gt;Technically, we don&#039;t need full functional completeness for XOR
-   (&amp;#226;&amp;#138;&amp;#187;), we&#039;d only need to be able to implement logical not and
-   increment.  For logical not, there&#039;s no problem, a &amp;#226;&amp;#138;&amp;#187; 1 = &amp;#194;&amp;#172;a, but
-   for increment, we need to implement a semi-adder, where s = a &amp;#226;&amp;#138;&amp;#187; b
-   and c = a &amp;#226;&amp;#136;&amp;#167; b.  But there is no way to get AND from XOR, because
-   XOR is closed over {0, 1, a, b, &amp;#194;&amp;#172;a, &amp;#194;&amp;#172;b, a&amp;#226;&amp;#138;&amp;#187;b, &amp;#194;&amp;#172;(a&amp;#226;&amp;#138;&amp;#187;b)} (any
+&lt;a href=&quot;http://en.wikipedia.org/wiki/Logical_connective&quot;&gt;Logical connective&lt;/a&gt;
+or on &lt;a href=&quot;http://en.wikipedia.org/wiki/Functional_completeness&quot;&gt;Functional completeness&lt;/a&gt;).
+&lt;/p&gt;
+&lt;blockquote&gt;
+&lt;small&gt;
+
+&lt;p&gt;Technically, we don&#039;t need full functional completeness for XOR
+   (⊻), we&#039;d only need to be able to implement logical not and
+   increment.  For logical not, there&#039;s no problem, a ⊻ 1 = ¬a, but
+   for increment, we need to implement a semi-adder, where s = a ⊻ b
+   and c = a ∧ b.  But there is no way to get AND from XOR, because
+   XOR is closed over {0, 1, a, b, ¬a, ¬b, a⊻b, ¬(a⊻b)} (any
    application of XOR on two elements of this set gives an element of
-   this set).&amp;lt;/p&amp;gt;
+   this set).&lt;/p&gt;


-&amp;lt;/small&amp;gt;
-&amp;lt;/blockquote&amp;gt;
+&lt;/small&gt;
+&lt;/blockquote&gt;


-&amp;lt;p&amp;gt;Since two-complement negation on binary words of length w is
-defined as &amp;lt;code&amp;gt;(mod (1+ (lognot n)) (expt 2 w))&amp;lt;/code&amp;gt;, we need more
-than just XOR and SHIFT...  Two impossibilities for one &amp;lt;em&amp;gt;interview
-question&amp;lt;/em&amp;gt;.  Vicious!  And asking to do that &amp;quot;without any kind of
-model&amp;quot;, tskss, tskss, I wouldn&#039;t like to work at such a company,
+&lt;p&gt;Since two-complement negation on binary words of length w is
+defined as &lt;code&gt;(mod (1+ (lognot n)) (expt 2 w))&lt;/code&gt;, we need more
+than just XOR and SHIFT...  Two impossibilities for one &lt;em&gt;interview
+question&lt;/em&gt;.  Vicious!  And asking to do that &quot;without any kind of
+model&quot;, tskss, tskss, I wouldn&#039;t like to work at such a company,
 unless the question was designed exactly for that, to weed out people
-doing what they&#039;re told without thinking...&amp;lt;/p&amp;gt;
+doing what they&#039;re told without thinking...&lt;/p&gt;



-&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
+&lt;pre&gt;&lt;code&gt;
 (declaim (ftype (function (integer) (unsigned-byte 32))
                 32-bit
                 32-bit/2-complement-neg))

 (defun 32-bit (x)
-  &amp;quot;Mask off 32-bits of X&amp;quot;
+  &quot;Mask off 32-bits of X&quot;
   (logand #xffffffff x))

 (defun 32-bit/plusp (n)
-  &amp;quot;Whether N represents a positive integer.&amp;quot;
+  &quot;Whether N represents a positive integer.&quot;
   (declare (type (unsigned-byte 32) n))
   (zerop (ldb (byte 1 31) n)))

 (defun 32-bit/2-complement-neg (n)
-  &amp;quot;Return the negation of N in 2-complement.&amp;quot;
+  &quot;Return the negation of N in 2-complement.&quot;
   (declare (type (unsigned-byte 32) n))
   (32-bit (1+ (lognot n))))

 (defun 32-bit/f (n)
-  &amp;quot;
+  &quot;
 Assuming n is a 32-bit 2-complement signed integer different
-from 0 and -2&amp;#194;&amp;#179;&amp;#194;&amp;#185;,  (= (- n) (f (f n)))
-&amp;quot;
+from 0 and -2³¹,  (= (- n) (f (f n)))
+&quot;
   (declare (type (unsigned-byte 32) n))
   (32-bit
    (case n                              ; (f (f n))
-     ((#x00000000) #x80000001)          ; --&amp;gt; 0x80000000
-     ((#x80000000) #x7FFFFFFF)          ; --&amp;gt; 0x00000000
-     ((#x7FFFFFFF) #x00000000)          ; --&amp;gt; 0x80000001
-     ((#x80000001) #x80000000)          ; --&amp;gt; 0x7fffffff
+     ((#x00000000) #x80000001)          ; --&gt; 0x80000000
+     ((#x80000000) #x7FFFFFFF)          ; --&gt; 0x00000000
+     ((#x7FFFFFFF) #x00000000)          ; --&gt; 0x80000001
+     ((#x80000001) #x80000000)          ; --&gt; 0x7fffffff
      ;;  For the above exceptions, any permutation is valid;
      ;;  we choose here to break it for 0 and M, with
      ;;  f(f(0))=M and f(f(M))=0,
-     ;;  to keep f(f(2&amp;#194;&amp;#179;&amp;#194;&amp;#185;-1))= -(2&amp;#194;&amp;#179;&amp;#194;&amp;#185;-1) and f(f(-(2&amp;#194;&amp;#179;&amp;#194;&amp;#185;-1)))= 2&amp;#194;&amp;#179;&amp;#194;&amp;#185;-1
+     ;;  to keep f(f(2³¹-1))= -(2³¹-1) and f(f(-(2³¹-1)))= 2³¹-1
      (otherwise
       (if (32-bit/plusp n)
           (if (oddp n)
@@ -3189,18 +3189,18 @@ from 0 and -2&amp;#194;&amp;#179;&amp;#194;&amp;#185;,  (= (- n) (f (f n)))
               (+ (lognot n) 2)
               (1+ n)))))))

-&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;


-&amp;lt;hr&amp;gt;
+&lt;hr&gt;

-&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
+&lt;pre&gt;&lt;code&gt;

-C/USER[83]&amp;gt; (load&amp;quot;&amp;lt;a href=&amp;quot;ffn=-n.lisp&amp;quot;&amp;gt;ffn=-n.lisp&amp;lt;/a&amp;gt;&amp;quot;)
+C/USER[83]&gt; (load&quot;&lt;a href=&quot;ffn=-n.lisp&quot;&gt;ffn=-n.lisp&lt;/a&gt;&quot;)
 ;; Loading file ffn=-n.lisp ...
 ;; Loaded file ffn=-n.lisp
 T
-C/USER[84]&amp;gt; (test-f)
+C/USER[84]&gt; (test-f)


            i           -i    (f (f i))        (f i) (- (f (f i)))
@@ -3285,583 +3285,583 @@ C/USER[84]&amp;gt; (test-f)
     80000001     7FFFFFFF     7FFFFFFF    80000000     80000001
     80000000     80000000 /=  00000000    7FFFFFFF     00000000
 NIL
-C/USER[85]&amp;gt;
-
-&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/ffn=-n/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html</id><published>2006-09-28T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">A Parser for M-Expressions</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/m-expr-mccarthy.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;A Parser for M-Expressions&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Here is a parser for Lisp M-Expressions as documented
-    in the Memo 8, AIM-8.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;LISP, Common Lisp, M-Expressions&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;m-expression&amp;quot;&amp;gt;
+C/USER[85]&gt;
+
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/hr&gt;
+&lt;/p&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/ffn=-n/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html</id><published>2006-09-28T12:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">A Parser for M-Expressions</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/m-expr-mccarthy.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html&quot;&gt;A Parser for M-Expressions&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Here is a parser for Lisp M-Expressions as documented
+    in the Memo 8, AIM-8.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;LISP, Common Lisp, M-Expressions&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;m-expression&quot;&gt;


-&amp;lt;h1&amp;gt;A Parser for M-Expressions&amp;lt;/h1&amp;gt;
+&lt;h1&gt;A Parser for M-Expressions&lt;/h1&gt;



-&amp;lt;p&amp;gt;Here is a parser for Lisp M-Expressions as documented in the
-    &amp;lt;a href=&amp;quot;../aim-8/index.html&amp;quot;&amp;gt;Memo 8, AIM-8&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
+&lt;p&gt;Here is a parser for Lisp M-Expressions as documented in the
+    &lt;a href=&quot;../aim-8/index.html&quot;&gt;Memo 8, AIM-8&lt;/a&gt;&lt;/p&gt;




-&amp;lt;p&amp;gt;
+&lt;p&gt;
     A lot of lisp newbies ask for more conventionnal syntax for lisp.
     Since day one, lisp was intended to have such a syntax: M-expressions.
-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;



-&amp;lt;p&amp;gt;
+&lt;p&gt;
     Let&#039;s newbies play with them, and realize how impractical they are.
     Note for example, that we cannot use macros anymore because
     their syntax would need to be known by the M-expression parser,
-    like it&#039;s the case for &amp;lt;tt&amp;gt;lambda[[...];...]&amp;lt;/tt&amp;gt;.
+    like it&#039;s the case for &lt;tt&gt;lambda[[...];...]&lt;/tt&gt;.
     Macros were added later in lisp history.
-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;



-&amp;lt;p&amp;gt;
+&lt;p&gt;
     Note that S-expressions can still be entered, as literal objects,
     but using comma instead of space to separate the items in lists.
-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;



-&amp;lt;p&amp;gt;The file &amp;lt;a href=&amp;quot;m-expression.lisp&amp;quot;&amp;gt;m-expression.lisp&amp;lt;/a&amp;gt;
-    contains the M-expression parser and a REPL, in Common-Lisp.&amp;lt;/p&amp;gt;
+&lt;p&gt;The file &lt;a href=&quot;m-expression.lisp&quot;&gt;m-expression.lisp&lt;/a&gt;
+    contains the M-expression parser and a REPL, in Common-Lisp.&lt;/p&gt;




-&amp;lt;h2&amp;gt;Exemple&amp;lt;/h2&amp;gt;
+&lt;h2&gt;Exemple&lt;/h2&gt;




-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
-% &amp;lt;b&amp;gt;/usr/local/bin/clisp -q -norc -ansi &amp;lt;/b&amp;gt;
+&lt;pre class=&quot;dribble&quot;&gt;
+% &lt;b&gt;/usr/local/bin/clisp -q -norc -ansi &lt;/b&gt;

-[1]&amp;amp;gt; &amp;lt;b&amp;gt;(load&amp;quot;m-expression.lisp&amp;quot; :external-format #+clisp charset:utf-8 #+sbcl :utf-8)&amp;lt;/b&amp;gt;
+[1]&amp;gt; &lt;b&gt;(load&quot;m-expression.lisp&quot; :external-format #+clisp charset:utf-8 #+sbcl :utf-8)&lt;/b&gt;
 ;; Loading file m-expression.lisp ...
 ;; Loaded file m-expression.lisp
 T
-[2]&amp;amp;gt; &amp;lt;b&amp;gt;(m-repl)&amp;lt;/b&amp;gt;
+[2]&amp;gt; &lt;b&gt;(m-repl)&lt;/b&gt;

 ;; We are going to define a function that is exported by COMMON-LISP,
 ;; so let&#039;s shadow it first:

-COMMON-LISP-USER[1]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;shadow[SUBST];&amp;lt;/b&amp;gt;
- --&amp;amp;gt; T
+COMMON-LISP-USER[1]M-REPL&amp;gt; &lt;b&gt;shadow[SUBST];&lt;/b&gt;
+ --&amp;gt; T

-COMMON-LISP-USER[2]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;label[subst;&amp;#206;&amp;#187;[[x;y;s];[null[s]-&amp;amp;gt;nil;atom[s]&amp;#226;&amp;#159;&amp;#182;
-           [y=s-&amp;amp;gt;x;1-&amp;amp;gt;s];1-&amp;amp;gt;combine[subst[x;y;first[s]];
-                subst[x;y;rest[s]]]]]];&amp;lt;/b&amp;gt;
- --&amp;amp;gt; SUBST
+COMMON-LISP-USER[2]M-REPL&amp;gt; &lt;b&gt;label[subst;λ[[x;y;s];[null[s]-&amp;gt;nil;atom[s]⟶
+           [y=s-&amp;gt;x;1-&amp;gt;s];1-&amp;gt;combine[subst[x;y;first[s]];
+                subst[x;y;rest[s]]]]]];&lt;/b&gt;
+ --&amp;gt; SUBST

 ;; S-expressions embedded in M-expressions must use comma as separator:
-COMMON-LISP-USER[3]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;subst[WATER;WINE;(MIX WATER AND WINE
-                                  INTO (MIXED WATER AND WINE))];&amp;lt;/b&amp;gt;
+COMMON-LISP-USER[3]M-REPL&amp;gt; &lt;b&gt;subst[WATER;WINE;(MIX WATER AND WINE
+                                  INTO (MIXED WATER AND WINE))];&lt;/b&gt;
 SIMPLE-ERROR:
 Unexpected S-CLOSE, not (:S-SYMBOL WATER)
- at &amp;quot; AND WINE&amp;quot;
+ at &quot; AND WINE&quot;

-COMMON-LISP-USER[4]M-REPL&amp;amp;gt; SIMPLE-ERROR:
+COMMON-LISP-USER[4]M-REPL&amp;gt; SIMPLE-ERROR:
 Please terminate your m-expressions with a semi-colon, not (:S-OPEN)

-COMMON-LISP-USER[5]M-REPL&amp;amp;gt;
+COMMON-LISP-USER[5]M-REPL&amp;gt;
 SIMPLE-ERROR:
 Please terminate your m-expressions with a semi-colon, not (:S-SYMBOL WATER)

-COMMON-LISP-USER[6]M-REPL&amp;amp;gt;
+COMMON-LISP-USER[6]M-REPL&amp;gt;
 SIMPLE-ERROR:
 Please terminate your m-expressions with a semi-colon, not (:S-SYMBOL WINE)

-COMMON-LISP-USER[7]M-REPL&amp;amp;gt;
+COMMON-LISP-USER[7]M-REPL&amp;gt;
 SIMPLE-ERROR:
 Unexpected token in m-term: (:S-CLOSE)
- at &amp;amp;quot;)];&amp;amp;quot;
+ at &amp;quot;)];&amp;quot;

-COMMON-LISP-USER[8]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;subst[WATER;WINE;(MIX,WATER,AND,WINE,
-                                 INTO,(MIXED,WATER,AND,WINE))];&amp;lt;/b&amp;gt;
- --&amp;amp;gt; (MIX WATER AND WATER INTO (MIXED WATER AND WATER))
+COMMON-LISP-USER[8]M-REPL&amp;gt; &lt;b&gt;subst[WATER;WINE;(MIX,WATER,AND,WINE,
+                                 INTO,(MIXED,WATER,AND,WINE))];&lt;/b&gt;
+ --&amp;gt; (MIX WATER AND WATER INTO (MIXED WATER AND WATER))

-COMMON-LISP-USER[9]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;subst[WINE;WATER;(MIX,WATER,AND,WINE,
-                                 INTO,(MIXED,WATER,AND,WINE))];&amp;lt;/b&amp;gt;
- --&amp;amp;gt; (MIX WINE AND WINE INTO (MIXED WINE AND WINE))
+COMMON-LISP-USER[9]M-REPL&amp;gt; &lt;b&gt;subst[WINE;WATER;(MIX,WATER,AND,WINE,
+                                 INTO,(MIXED,WATER,AND,WINE))];&lt;/b&gt;
+ --&amp;gt; (MIX WINE AND WINE INTO (MIXED WINE AND WINE))

-COMMON-LISP-USER[10]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;first[((A,B),C,D)]=(A,B);&amp;lt;/b&amp;gt;
+COMMON-LISP-USER[10]M-REPL&amp;gt; &lt;b&gt;first[((A,B),C,D)]=(A,B);&lt;/b&gt;

- --&amp;amp;gt; NIL
+ --&amp;gt; NIL

-COMMON-LISP-USER[11]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;combine[A;&amp;#226;&amp;#139;&amp;#128;];&amp;lt;/b&amp;gt;
- --&amp;amp;gt; (A)
+COMMON-LISP-USER[11]M-REPL&amp;gt; &lt;b&gt;combine[A;⋀];&lt;/b&gt;
+ --&amp;gt; (A)

-COMMON-LISP-USER[12]M-REPL&amp;amp;gt; &amp;lt;b&amp;gt;quit[];&amp;lt;/b&amp;gt;
+COMMON-LISP-USER[12]M-REPL&amp;gt; &lt;b&gt;quit[];&lt;/b&gt;
 NIL
-[3]&amp;amp;gt;
+[3]&amp;gt;

-  &amp;lt;/pre&amp;gt;
+  &lt;/pre&gt;



-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/interleave/index.html</id><published>2006-08-26T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Interleave</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/interleave.png&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Interleave&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;Implementation in Common Lisp of an algorithm to compute &amp;quot;interleave&amp;quot; and &amp;quot;deinterleave&amp;quot; permutations.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;interleave&amp;quot;&amp;gt;
-&amp;lt;h1&amp;gt;Interleave&amp;lt;/h1&amp;gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/articles/interleave/index.html</id><published>2006-08-26T12:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">Interleave</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/interleave.png&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/articles/interleave/index.html&quot;&gt;Interleave&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;Implementation in Common Lisp of an algorithm to compute &quot;interleave&quot; and &quot;deinterleave&quot; permutations.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;interleave&quot;&gt;
+&lt;h1&gt;Interleave&lt;/h1&gt;



-&amp;lt;p&amp;gt;On &amp;lt;a href=&amp;quot;news:comp.programming&amp;quot;&amp;gt;comp.programming&amp;lt;/a&amp;gt; &amp;lt;em&amp;gt;mike3&amp;lt;/em&amp;gt;&amp;lt;a href=&amp;quot;http://groups.google.com/group/comp.programming/browse_frm/thread/b335648ee7e3d065/21a1283c430f6ad5?#21a1283c430f6ad5&amp;quot;&amp;gt;
-asked for an algorithm to compute &amp;quot;interleave&amp;quot; and &amp;quot;deinterleave&amp;quot;
-permutations&amp;lt;/a&amp;gt;.
+&lt;p&gt;On &lt;a href=&quot;news:comp.programming&quot;&gt;comp.programming&lt;/a&gt; &lt;em&gt;mike3&lt;/em&gt;&lt;a href=&quot;http://groups.google.com/group/comp.programming/browse_frm/thread/b335648ee7e3d065/21a1283c430f6ad5?#21a1283c430f6ad5&quot;&gt;
+asked for an algorithm to compute &quot;interleave&quot; and &quot;deinterleave&quot;
+permutations&lt;/a&gt;.

-Here is &amp;lt;a href=&amp;quot;interleave.lisp&amp;quot;&amp;gt;an implementation&amp;lt;/a&amp;gt; in &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Common_Lisp&amp;quot;&amp;gt;Common Lisp&amp;lt;/a&amp;gt; of such an algorithm.
+Here is &lt;a href=&quot;interleave.lisp&quot;&gt;an implementation&lt;/a&gt; in &lt;a href=&quot;http://en.wikipedia.org/wiki/Common_Lisp&quot;&gt;Common Lisp&lt;/a&gt; of such an algorithm.

-&amp;lt;p&amp;gt;The following diagrams are generated by &amp;lt;a href=&amp;quot;http://www.graphviz.org/&amp;quot;&amp;gt;
-Graphviz&amp;lt;/a&amp;gt; from .dot files generated by &amp;lt;a href=&amp;quot;interleave.lisp&amp;quot;&amp;gt;interleave.lisp&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
+&lt;p&gt;The following diagrams are generated by &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;
+Graphviz&lt;/a&gt; from .dot files generated by &lt;a href=&quot;interleave.lisp&quot;&gt;interleave.lisp&lt;/a&gt;.&lt;/p&gt;


-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;permutations.html&amp;quot;&amp;gt;Permutations up to 98&amp;lt;/a&amp;gt;...&amp;lt;/p&amp;gt;
+&lt;p&gt;&lt;a href=&quot;permutations.html&quot;&gt;Permutations up to 98&lt;/a&gt;...&lt;/p&gt;


-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;2&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;2 cycles, of lengths: 1, 1.
-&amp;lt;br&amp;gt;((1) (0))
-&amp;lt;br&amp;gt;
+&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;
+&lt;br&gt;2 cycles, of lengths: 1, 1.
+&lt;br&gt;((1) (0))
+&lt;br&gt;
 2 = 2
-&amp;lt;br&amp;gt;
+&lt;br&gt;
 0 =
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-02.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-02.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-02.png&amp;quot; width=&amp;quot;194&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;4&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;3 cycles, of lengths: 1, 2, 1.
-&amp;lt;br&amp;gt;((3) (2 1) (0))
-&amp;lt;br&amp;gt;
-4 = 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-02.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-02.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-02.png&quot; width=&quot;194&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;4&lt;/strong&gt;
+&lt;br&gt;3 cycles, of lengths: 1, 2, 1.
+&lt;br&gt;((3) (2 1) (0))
+&lt;br&gt;
+4 = 2&lt;sup&gt;2&lt;/sup&gt;
+&lt;br&gt;
 2 = 2
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-04.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-04.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-04.png&amp;quot; width=&amp;quot;207&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;6&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;3 cycles, of lengths: 1, 4, 1.
-&amp;lt;br&amp;gt;((5) (2 4 3 1) (0))
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-04.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-04.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-04.png&quot; width=&quot;207&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;6&lt;/strong&gt;
+&lt;br&gt;3 cycles, of lengths: 1, 4, 1.
+&lt;br&gt;((5) (2 4 3 1) (0))
+&lt;br&gt;
 6 = 3 * 2
-&amp;lt;br&amp;gt;
-4 = 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-06.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-06.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-06.png&amp;quot; width=&amp;quot;288&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;8&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;4 cycles, of lengths: 1, 3, 3, 1.
-&amp;lt;br&amp;gt;((7) (6 5 3) (2 4 1) (0))
-&amp;lt;br&amp;gt;
-8 = 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+4 = 2&lt;sup&gt;2&lt;/sup&gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-06.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-06.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-06.png&quot; width=&quot;288&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;8&lt;/strong&gt;
+&lt;br&gt;4 cycles, of lengths: 1, 3, 3, 1.
+&lt;br&gt;((7) (6 5 3) (2 4 1) (0))
+&lt;br&gt;
+8 = 2&lt;sup&gt;3&lt;/sup&gt;
+&lt;br&gt;
 6 = 3 * 2
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-08.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-08.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-08.png&amp;quot; width=&amp;quot;370&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;10&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;4 cycles, of lengths: 1, 2, 6, 1.
-&amp;lt;br&amp;gt;((9) (6 3) (2 4 8 7 5 1) (0))
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-08.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-08.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-08.png&quot; width=&quot;370&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;10&lt;/strong&gt;
+&lt;br&gt;4 cycles, of lengths: 1, 2, 6, 1.
+&lt;br&gt;((9) (6 3) (2 4 8 7 5 1) (0))
+&lt;br&gt;
 10 = 5 * 2
-&amp;lt;br&amp;gt;
-8 = 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-10.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-10.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-10.png&amp;quot; width=&amp;quot;452&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;12&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;3 cycles, of lengths: 1, 10, 1.
-&amp;lt;br&amp;gt;((11) (2 4 8 5 10 9 7 3 6 1) (0))
-&amp;lt;br&amp;gt;
-12 = 3 * 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+8 = 2&lt;sup&gt;3&lt;/sup&gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-10.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-10.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-10.png&quot; width=&quot;452&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;12&lt;/strong&gt;
+&lt;br&gt;3 cycles, of lengths: 1, 10, 1.
+&lt;br&gt;((11) (2 4 8 5 10 9 7 3 6 1) (0))
+&lt;br&gt;
+12 = 3 * 2&lt;sup&gt;2&lt;/sup&gt;
+&lt;br&gt;
 10 = 5 * 2
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-12.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-12.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-12.png&amp;quot; width=&amp;quot;564&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;14&amp;lt;/strong&amp;gt;
-&amp;lt;br&amp;gt;3 cycles, of lengths: 1, 12, 1.
-&amp;lt;br&amp;gt;((13) (2 4 8 3 6 12 11 9 5 10 7 1) (0))
-&amp;lt;br&amp;gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-12.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-12.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-12.png&quot; width=&quot;564&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+&lt;p&gt;&lt;strong&gt;14&lt;/strong&gt;
+&lt;br&gt;3 cycles, of lengths: 1, 12, 1.
+&lt;br&gt;((13) (2 4 8 3 6 12 11 9 5 10 7 1) (0))
+&lt;br&gt;
 14 = 7 * 2
-&amp;lt;br&amp;gt;
-12 = 3 * 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;graph-14.png&amp;quot;&amp;gt;&amp;amp;nbsp;
-&amp;lt;img src=&amp;quot;interleave-14.png&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;img src=&amp;quot;circle-14.png&amp;quot; width=&amp;quot;651&amp;quot;&amp;gt;
-&amp;lt;br&amp;gt;
-&amp;lt;hr&amp;gt;
-
-
-
-&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;permutations.html&amp;quot;&amp;gt;Permutations up to 98&amp;lt;/a&amp;gt;...&amp;lt;/p&amp;gt;
-
-
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/hr&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/img&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/br&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/interleave/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html</id><published>2006-05-04T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Image Based Development</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/interlisp-xerox.gif&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Image Based Development&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;An utility to ease development in a Common Lisp image.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Common Lisp, Lisp, Lisp Image, Image Based Common Lisp, IBCL&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;ibcl&amp;quot;&amp;gt;
+&lt;br&gt;
+12 = 3 * 2&lt;sup&gt;2&lt;/sup&gt;
+&lt;br&gt;
+&lt;img src=&quot;graph-14.png&quot;&gt;&amp;nbsp;
+&lt;img src=&quot;interleave-14.png&quot;&gt;
+&lt;br&gt;
+&lt;img src=&quot;circle-14.png&quot; width=&quot;651&quot;&gt;
+&lt;br&gt;
+&lt;hr&gt;
+
+
+
+&lt;p&gt;&lt;a href=&quot;permutations.html&quot;&gt;Permutations up to 98&lt;/a&gt;...&lt;/p&gt;
+
+
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/hr&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/img&gt;
+&lt;/img&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/br&gt;
+&lt;/p&gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/articles/interleave/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html</id><published>2006-05-04T12:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">Image Based Development</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/interlisp-xerox.gif&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html&quot;&gt;Image Based Development&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;An utility to ease development in a Common Lisp image.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Common Lisp, Lisp, Lisp Image, Image Based Common Lisp, IBCL&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;ibcl&quot;&gt;


-&amp;lt;h1&amp;gt;Image Based Development&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Image Based Development&lt;/h1&gt;




-&amp;lt;p&amp;gt;The package &amp;lt;tt&amp;gt;IBCL&amp;lt;/tt&amp;gt; exports the same symbols as &amp;lt;tt&amp;gt;COMMON-LISP&amp;lt;/tt&amp;gt;, but for
+&lt;p&gt;The package &lt;tt&gt;IBCL&lt;/tt&gt; exports the same symbols as &lt;tt&gt;COMMON-LISP&lt;/tt&gt;, but for
     some of the functions of macros modified to track of the source
     of the definitions and to be able to edit them from the image,
-    and to save them in files.&amp;lt;/p&amp;gt;
+    and to save them in files.&lt;/p&gt;




-&amp;lt;p&amp;gt;The package &amp;lt;tt&amp;gt;IBCL-USER&amp;lt;/tt&amp;gt; is a virgin package using &amp;lt;tt&amp;gt;IBCL&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;CL&amp;lt;/tt&amp;gt;.&amp;lt;/p&amp;gt;
+&lt;p&gt;The package &lt;tt&gt;IBCL-USER&lt;/tt&gt; is a virgin package using &lt;tt&gt;IBCL&lt;/tt&gt; instead of &lt;tt&gt;CL&lt;/tt&gt;.&lt;/p&gt;




-&amp;lt;p&amp;gt;One can work at the REPL, define variables with
-    &amp;lt;tt&amp;gt;DEFCONSTANT&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;DEFVAR&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;DEFPARAMETER&amp;lt;/tt&amp;gt;, macros with &amp;lt;tt&amp;gt;DEFMACRO&amp;lt;/tt&amp;gt;,
-    and functions with &amp;lt;tt&amp;gt;DEFUN&amp;lt;/tt&amp;gt;, edit macro and function definitions
-    with &amp;lt;tt&amp;gt;ED&amp;lt;/tt&amp;gt;, and save the image with &amp;lt;tt&amp;gt;SAVE-IMAGE&amp;lt;/tt&amp;gt;.&amp;lt;/p&amp;gt;
+&lt;p&gt;One can work at the REPL, define variables with
+    &lt;tt&gt;DEFCONSTANT&lt;/tt&gt;, &lt;tt&gt;DEFVAR&lt;/tt&gt;, &lt;tt&gt;DEFPARAMETER&lt;/tt&gt;, macros with &lt;tt&gt;DEFMACRO&lt;/tt&gt;,
+    and functions with &lt;tt&gt;DEFUN&lt;/tt&gt;, edit macro and function definitions
+    with &lt;tt&gt;ED&lt;/tt&gt;, and save the image with &lt;tt&gt;SAVE-IMAGE&lt;/tt&gt;.&lt;/p&gt;




-&amp;lt;p&amp;gt;The function &amp;lt;tt&amp;gt;LIST-PACKAGES-WITH-SOURCES&amp;lt;/tt&amp;gt; returns a list of packages
+&lt;p&gt;The function &lt;tt&gt;LIST-PACKAGES-WITH-SOURCES&lt;/tt&gt; returns a list of packages
     where some of these variables or functions are defined.
-    The function &amp;lt;tt&amp;gt;SOURCE&amp;lt;/tt&amp;gt; returns the source form of the given
+    The function &lt;tt&gt;SOURCE&lt;/tt&gt; returns the source form of the given
     variable or function.
-    The function &amp;lt;tt&amp;gt;SAVE-SOURCES&amp;lt;/tt&amp;gt; saves the definitions in a package,
-    or all the definitions to a file or stream.&amp;lt;/p&amp;gt;
+    The function &lt;tt&gt;SAVE-SOURCES&lt;/tt&gt; saves the definitions in a package,
+    or all the definitions to a file or stream.&lt;/p&gt;




-&amp;lt;p&amp;gt;A recent complete implementation of IBCL can be found in the
-    &amp;lt;a href=&amp;quot;https://gitorious.org/com-informatimago/com-informatimago&amp;quot;&amp;gt;
-      Informatimago  Common Lisp Library at gitorious&amp;lt;/a&amp;gt;, specifically:
-    &amp;lt;a href=&amp;quot;https://gitorious.org/com-informatimago/com-informatimago/trees/master/common-lisp/lisp&amp;quot;&amp;gt;
-      com.informatimago.common-lisp.lisp&amp;lt;/a&amp;gt;.
+&lt;p&gt;A recent complete implementation of IBCL can be found in the
+    &lt;a href=&quot;https://gitorious.org/com-informatimago/com-informatimago&quot;&gt;
+      Informatimago  Common Lisp Library at gitorious&lt;/a&gt;, specifically:
+    &lt;a href=&quot;https://gitorious.org/com-informatimago/com-informatimago/trees/master/common-lisp/lisp&quot;&gt;
+      com.informatimago.common-lisp.lisp&lt;/a&gt;.


-&amp;lt;p&amp;gt;You can load it in a Common Lisp implementation with
-    &amp;lt;a href=&amp;quot;http://www.quicklisp.org/&amp;quot;&amp;gt;quicklisp&amp;lt;/a&amp;gt;:&amp;lt;/p&amp;gt;
+&lt;p&gt;You can load it in a Common Lisp implementation with
+    &lt;a href=&quot;http://www.quicklisp.org/&quot;&gt;quicklisp&lt;/a&gt;:&lt;/p&gt;




-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
-cl-user&amp;amp;gt; (ql:quickload :com.informatimago.common-lisp.lisp.ibcl)
-To load &amp;quot;com.informatimago.common-lisp.lisp.ibcl&amp;quot;:
+&lt;pre class=&quot;dribble&quot;&gt;
+cl-user&amp;gt; (ql:quickload :com.informatimago.common-lisp.lisp.ibcl)
+To load &quot;com.informatimago.common-lisp.lisp.ibcl&quot;:
   Load 1 ASDF system:
     com.informatimago.common-lisp.lisp.ibcl
-; Loading &amp;quot;com.informatimago.common-lisp.lisp.ibcl&amp;quot;
+; Loading &quot;com.informatimago.common-lisp.lisp.ibcl&quot;
 [package com.informatimago.common-lisp.lisp.image-based-common-lisp]
 [package com.informatimago.common-lisp.lisp.image-based-common-lisp-user]
 (:com.informatimago.common-lisp.lisp.ibcl)
-cl-user&amp;amp;gt; (in-package :ibcl-user)
-#&amp;amp;lt;Package &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-image-based-common-lisp-user&amp;amp;gt; (defun f (x)
+cl-user&amp;gt; (in-package :ibcl-user)
+#&amp;lt;Package &quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&quot;&amp;gt;
+image-based-common-lisp-user&amp;gt; (defun f (x)
                                 (if (zerop x)
                                   1
                                   (* x (f (1- x)))))

 f
-image-based-common-lisp-user&amp;amp;gt; (source &#039;f :function)
+image-based-common-lisp-user&amp;gt; (source &#039;f :function)
 (defun f (x) (if (zerop x) 1 (* x (f (1- x)))))
-#&amp;amp;lt;Package &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-image-based-common-lisp-user&amp;amp;gt; (defvar f 42)
+#&amp;lt;Package &quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&quot;&amp;gt;
+image-based-common-lisp-user&amp;gt; (defvar f 42)
 f
-image-based-common-lisp-user&amp;amp;gt; (source &#039;f :variable)
+image-based-common-lisp-user&amp;gt; (source &#039;f :variable)
 (defvar f 42)
-#&amp;amp;lt;Package &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-image-based-common-lisp-user&amp;amp;gt; (defun (setf f) (newval) (setf f newval))
+#&amp;lt;Package &quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&quot;&amp;gt;
+image-based-common-lisp-user&amp;gt; (defun (setf f) (newval) (setf f newval))
 (setf f)
-image-based-common-lisp-user&amp;amp;gt; (source &#039;(setf f) :function)
+image-based-common-lisp-user&amp;gt; (source &#039;(setf f) :function)
 (defun (setf f) (newval) (setf f newval))
-#&amp;amp;lt;Package &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-image-based-common-lisp-user&amp;amp;gt; (in-package :cl-user)
-#&amp;amp;lt;Package &amp;quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-image-based-common-lisp-user&amp;amp;gt; (cl:in-package :cl-user)
-#&amp;amp;lt;Package &amp;quot;COMMON-LISP-USER&amp;quot;&amp;amp;gt;
-cl-user&amp;amp;gt;
-  &amp;lt;/pre&amp;gt;
+#&amp;lt;Package &quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&quot;&amp;gt;
+image-based-common-lisp-user&amp;gt; (in-package :cl-user)
+#&amp;lt;Package &quot;COM.INFORMATIMAGO.COMMON-LISP.LISP.IMAGE-BASED-COMMON-LISP-USER&quot;&amp;gt;
+image-based-common-lisp-user&amp;gt; (cl:in-package :cl-user)
+#&amp;lt;Package &quot;COMMON-LISP-USER&quot;&amp;gt;
+cl-user&amp;gt;
+  &lt;/pre&gt;




-&amp;lt;p&amp;gt;Old proof-of-concept source:
+&lt;p&gt;Old proof-of-concept source:

-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;ibcl.lisp&amp;quot;&amp;gt;ibcl.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;ibcl.lisp&quot;&gt;ibcl.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;ibcl-bootstrap.lisp&amp;quot;&amp;gt;ibcl-bootstrap.lisp&amp;lt;/a&amp;gt;
+&lt;li&gt;&lt;a href=&quot;ibcl-bootstrap.lisp&quot;&gt;ibcl-bootstrap.lisp&lt;/a&gt;
         A script to generate an executable image using
         IMAGE-BASED-COMMON-LISP instead of COMMON-LISP.
-        For &amp;lt;a href=&amp;quot;http://clisp.cons.org/&amp;quot;&amp;gt;clisp&amp;lt;/a&amp;gt;
-        or  &amp;lt;a href=&amp;quot;http://sbcl.sourceforge.net/&amp;quot;&amp;gt;sbcl&amp;lt;/a&amp;gt;.&amp;lt;/li&amp;gt;
+        For &lt;a href=&quot;http://clisp.cons.org/&quot;&gt;clisp&lt;/a&gt;
+        or  &lt;a href=&quot;http://sbcl.sourceforge.net/&quot;&gt;sbcl&lt;/a&gt;.&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;


-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;



-&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html</id><published>2005-09-11T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">Brainfuck</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/brainfuck.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;Brainfuck&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A Brainfuck implementation.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Brainfuck, Common Lisp, Lisp, virtual machine, compiler, emulator&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;brainfuck&amp;quot;&amp;gt;
+&lt;/p&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html</id><published>2005-09-11T12:00:00+0100</published><updated>2015-10-26T00:27:50+0100</updated><title type="text">Brainfuck</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/brainfuck.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html&quot;&gt;Brainfuck&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A Brainfuck implementation.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;Brainfuck, Common Lisp, Lisp, virtual machine, compiler, emulator&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;brainfuck&quot;&gt;


-&amp;lt;h1&amp;gt;Brainfuck in Lisp&amp;lt;/h1&amp;gt;
+&lt;h1&gt;Brainfuck in Lisp&lt;/h1&gt;




-&amp;lt;p&amp;gt;This file contains:
+&lt;p&gt;This file contains:

-&amp;lt;ul&amp;gt;
+&lt;ul&gt;




-&amp;lt;li&amp;gt;a brainfuck virtual machine in Lisp&amp;lt;/li&amp;gt;
+&lt;li&gt;a brainfuck virtual machine in Lisp&lt;/li&gt;




-&amp;lt;li&amp;gt;a brainfuck optimizing compiler, translates to lisp and compiles
-        lisp to native code&amp;lt;/li&amp;gt;
+&lt;li&gt;a brainfuck optimizing compiler, translates to lisp and compiles
+        lisp to native code&lt;/li&gt;




-&amp;lt;li&amp;gt;a sketch for an implementation of a lisp on brainfuck. Nothing
+&lt;li&gt;a sketch for an implementation of a lisp on brainfuck. Nothing
         much actually, some macros to generate brainfuck code from lisp,
-        some lisp &amp;quot;vm&amp;quot; primitives.  I kind of abandonned this, given the
+        some lisp &quot;vm&quot; primitives.  I kind of abandonned this, given the
         time complexity of any non-trivial brainfuck program and space
         limitations of the brainfuck virtual machine (however, this
         brainfuck to lisp compiler reduces the time complexities by using
         some random access to the memory, so it might be practical. Not
         that there is no limitation on the size of the
         programs...).
-&amp;lt;br&amp;gt;Instead of implementing a lisp system over the
+&lt;br&gt;Instead of implementing a lisp system over the
         brainfuck virtual machine, it might be more practical to implement
-        a lisp compiler generating optimized brainfuck code.&amp;lt;/br&amp;gt;
-&amp;lt;/li&amp;gt;
+        a lisp compiler generating optimized brainfuck code.&lt;/br&gt;
+&lt;/li&gt;




-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;


-  &amp;lt;/p&amp;gt;
+  &lt;/p&gt;





-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;bf.lisp&amp;quot;&amp;gt;bf.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;bf.lisp&quot;&gt;bf.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;99botles.bf&amp;quot;&amp;gt;99botles.bf -- the &amp;quot;99 Bottles&amp;quot; program in brainfuck&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;99botles.bf&quot;&gt;99botles.bf -- the &quot;99 Bottles&quot; program in brainfuck&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;



-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html</id><published>2004-10-24T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">The original LISP</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/aim-8-mccarthy.gif&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;The original LISP&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;An implementation of the Original LISP in the AIM-8,
-    including a transcription of said memo.&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;LISP, Common Lisp, AIM-8, John McCarthy&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;original-lisp&amp;quot;&amp;gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html</id><published>2004-10-24T12:00:00+0100</published><updated>2015-10-26T00:27:51+0100</updated><title type="text">The original LISP</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/aim-8-mccarthy.gif&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html&quot;&gt;The original LISP&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;An implementation of the Original LISP in the AIM-8,
+    including a transcription of said memo.&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;LISP, Common Lisp, AIM-8, John McCarthy&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;original-lisp&quot;&gt;


-&amp;lt;h1&amp;gt;The original LISP&amp;lt;/h1&amp;gt;
+&lt;h1&gt;The original LISP&lt;/h1&gt;



-&amp;lt;p&amp;gt;Here is an implementation of the Original LISP as documented in
-  &amp;lt;quote&amp;gt;
-&amp;lt;pre class=&amp;quot;text&amp;quot;&amp;gt;
+&lt;p&gt;Here is an implementation of the Original LISP as documented in
+  &lt;quote&gt;
+&lt;pre class=&quot;text&quot;&gt;
                                   March 4, 1959

     Artificial Intelligence Project--RLE and MIT Computation Center
@@ -3873,67 +3873,67 @@ cl-user&amp;amp;gt;
                          BY MACHINE

                        by J. McCarthy
-   &amp;lt;/pre&amp;gt;
-&amp;lt;/quote&amp;gt;
-&amp;lt;ul&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;aim-8.html&amp;quot;&amp;gt;A transcription into machine readable form
-                        (HTML and text)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-008.pdf&amp;quot;&amp;gt;
-      AI Memo 8, AIM-008.pdf&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.ai.mit.edu/research/publications/browse/0000browse.shtml&amp;quot;&amp;gt;
+   &lt;/pre&gt;
+&lt;/quote&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;a href=&quot;aim-8.html&quot;&gt;A transcription into machine readable form
+                        (HTML and text)&lt;/a&gt;&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-008.pdf&quot;&gt;
+      AI Memo 8, AIM-008.pdf&lt;/a&gt;&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://www.ai.mit.edu/research/publications/browse/0000browse.shtml&quot;&gt;
       CSAIL Digital Archive - Artificial Intelligence Laboratory Series,
-      Publications 0 through 99&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www-formal.stanford.edu/jmc/history/lisp/lisp.html&amp;quot;&amp;gt;
-    History of Lisp&amp;lt;/a&amp;gt; by John McCarthy&amp;lt;/li&amp;gt;
-&amp;lt;/ul&amp;gt;
-&amp;lt;/p&amp;gt;
+      Publications 0 through 99&lt;/a&gt;&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://www-formal.stanford.edu/jmc/history/lisp/lisp.html&quot;&gt;
+    History of Lisp&lt;/a&gt; by John McCarthy&lt;/li&gt;
+&lt;/ul&gt;
+&lt;/p&gt;




-&amp;lt;p&amp;gt;The only symbols predefined are: DEFINE, LAMBDA, LABEL, COND, COMBINE,
-FIRST, REST, NULL, ATOM, EQ, NIL, T, and QUOTE. &amp;lt;/p&amp;gt;
+&lt;p&gt;The only symbols predefined are: DEFINE, LAMBDA, LABEL, COND, COMBINE,
+FIRST, REST, NULL, ATOM, EQ, NIL, T, and QUOTE. &lt;/p&gt;




-&amp;lt;p&amp;gt;The file &amp;lt;a href=&amp;quot;aim-8.lisp&amp;quot;&amp;gt;aim-8.lisp&amp;lt;/a&amp;gt;
-     contains an implementation in Common-Lisp.&amp;lt;/p&amp;gt;
+&lt;p&gt;The file &lt;a href=&quot;aim-8.lisp&quot;&gt;aim-8.lisp&lt;/a&gt;
+     contains an implementation in Common-Lisp.&lt;/p&gt;



-&amp;lt;p&amp;gt;The file &amp;lt;a href=&amp;quot;aim-8.aim-8&amp;quot;&amp;gt;aim-8.aim-8&amp;lt;/a&amp;gt;
-     contains an implementation in AIM-8 LISP.&amp;lt;/p&amp;gt;
+&lt;p&gt;The file &lt;a href=&quot;aim-8.aim-8&quot;&gt;aim-8.aim-8&lt;/a&gt;
+     contains an implementation in AIM-8 LISP.&lt;/p&gt;



-&amp;lt;p&amp;gt;The file &amp;lt;a href=&amp;quot;examples.aim-8&amp;quot;&amp;gt;examples.aim-8&amp;lt;/a&amp;gt;
+&lt;p&gt;The file &lt;a href=&quot;examples.aim-8&quot;&gt;examples.aim-8&lt;/a&gt;
      contains the other examples given in AIM-8: differential
-     and turing machine.&amp;lt;/p&amp;gt;
+     and turing machine.&lt;/p&gt;




-&amp;lt;p&amp;gt;(It should be  noted that &amp;quot;compiler&amp;quot; occurs 4  times in this Memo,
-      while &amp;quot;interpreter&amp;quot; doesn&#039;t appears.)&amp;lt;/p&amp;gt;
+&lt;p&gt;(It should be  noted that &quot;compiler&quot; occurs 4  times in this Memo,
+      while &quot;interpreter&quot; doesn&#039;t appears.)&lt;/p&gt;





-&amp;lt;p&amp;gt;For more information about Lisp history, see the
-     &amp;lt;a href=&amp;quot;http://community.computerhistory.org/scc/projects/LISP/&amp;quot;&amp;gt;
-         Computer History Museum, History of Lisp&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
+&lt;p&gt;For more information about Lisp history, see the
+     &lt;a href=&quot;http://community.computerhistory.org/scc/projects/LISP/&quot;&gt;
+         Computer History Museum, History of Lisp&lt;/a&gt;&lt;/p&gt;




-&amp;lt;h2&amp;gt;Exemple&amp;lt;/h2&amp;gt;
+&lt;h2&gt;Exemple&lt;/h2&gt;



-&amp;lt;pre class=&amp;quot;dribble&amp;quot;&amp;gt;
-% &amp;lt;b&amp;gt;/usr/local/bin/clisp -norc -ansi &amp;lt;/b&amp;gt;
+&lt;pre class=&quot;dribble&quot;&gt;
+% &lt;b&gt;/usr/local/bin/clisp -norc -ansi &lt;/b&gt;
   i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
   I I I I I I I      8     8   8           8     8     o  8    8
   I  \ `+&#039; /  I      8         8           8     8        8    8
@@ -3948,14 +3948,14 @@ Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
 Copyright (c) Bruno Haible, Sam Steingold 1999-2000
 Copyright (c) Sam Steingold, Bruno Haible 2001-2006

-[1]&amp;amp;gt; &amp;lt;b&amp;gt;(load (compile-file &amp;quot;aim-8.lisp&amp;quot;))&amp;lt;/b&amp;gt;
+[1]&amp;gt; &lt;b&gt;(load (compile-file &quot;aim-8.lisp&quot;))&lt;/b&gt;
 ;; Compiling file /local/users/pjb/src/public/small-cl-pgms/aim-8/aim-8.lisp ...
 ;; Wrote file /local/users/pjb/src/public/small-cl-pgms/aim-8/aim-8.fas
 0 errors, 0 warnings
 ;; Loading file /local/users/pjb/src/public/small-cl-pgms/aim-8/aim-8.fas ...
 ;; Loaded file /local/users/pjb/src/public/small-cl-pgms/aim-8/aim-8.fas
 T
-[2]&amp;amp;gt; &amp;lt;b&amp;gt;(aim-8:repl)&amp;lt;/b&amp;gt;
+[2]&amp;gt; &lt;b&gt;(aim-8:repl)&lt;/b&gt;
 You&#039;ve got:
     LAMBDA LABEL
     COND AND OR NOT  COMBINE FIRST REST
@@ -3963,12 +3963,12 @@ You&#039;ve got:
 Extensions:
     DEFINE RELOAD DUMP-ENVIRONMENT LOAD
     QUIT
-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(define maplist
+AIM-8&amp;gt; &lt;b&gt;(define maplist
            (lambda (x f)
              (cond ((null x) nil)
-                   (t        (combine (f x) (maplist (rest x) f))))))&amp;lt;/b&amp;gt;
+                   (t        (combine (f x) (maplist (rest x) f))))))&lt;/b&gt;
 MAPLIST
-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(define diff
+AIM-8&amp;gt; &lt;b&gt;(define diff
            (lambda (y x)
              (cond
                ((atom y)
@@ -3988,11 +3988,11 @@ AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(define diff
                                    (lambda (w) (cond
                                             ((not (eq a w)) (first w))
                                             (t (diff (first w) x))
-                                            )))))))))))&amp;lt;/b&amp;gt;
+                                            )))))))))))&lt;/b&gt;
 DIFF
-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(diff (quote (plus (times a x) b)) (quote x))&amp;lt;/b&amp;gt;
+AIM-8&amp;gt; &lt;b&gt;(diff (quote (plus (times a x) b)) (quote x))&lt;/b&gt;
 (PLUS (PLUS (TIMES ZERO X) (TIMES A ONE)) ZERO)
-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(diff (quote (plus (times a x x) (times b x) c)) (quote x))&amp;lt;/b&amp;gt;
+AIM-8&amp;gt; &lt;b&gt;(diff (quote (plus (times a x x) (times b x) c)) (quote x))&lt;/b&gt;
 (PLUS (PLUS (TIMES ZERO X X) (TIMES A ONE X) (TIMES A X ONE))
  (PLUS (TIMES ZERO X) (TIMES B ONE)) ZERO)

@@ -4002,103 +4002,103 @@ AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(diff (quote (plus (times a x x) (times b x)
 ;; results for procedures with side-effects like PRINT and READ.
 ;; Moreover, this has the effect of giving exponential complexities very easily.

-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;((lambda (x) (combine x (combine x nil))) (print (quote a)))&amp;lt;/b&amp;gt;
+AIM-8&amp;gt; &lt;b&gt;((lambda (x) (combine x (combine x nil))) (print (quote a)))&lt;/b&gt;

 A
 A (A A)
-AIM-8&amp;amp;gt; &amp;lt;b&amp;gt;(quit)&amp;lt;/b&amp;gt;
+AIM-8&amp;gt; &lt;b&gt;(quit)&lt;/b&gt;
 GOOD BYE
 NIL
-[3]&amp;amp;gt; &amp;lt;b&amp;gt;(quit)&amp;lt;/b&amp;gt;
+[3]&amp;gt; &lt;b&gt;(quit)&lt;/b&gt;
 Bye.
 %

-  &amp;lt;/pre&amp;gt;
+  &lt;/pre&gt;



-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
-</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/basic/index.html</id><published>2003-05-19T12:00:00+0100</published><updated><iso8601-date/></updated><title type="text">BASIC</title><content type="html">&amp;lt;div class=&amp;quot;blog&amp;quot;&amp;gt;
-&amp;lt;div class=&amp;quot;header&amp;quot;&amp;gt;
-&amp;lt;img src=&amp;quot;http://www.informatimago.com/blog/dartmouth-basic.jpg&amp;quot; height=&amp;quot;100px&amp;quot; class=&amp;quot;floatRight&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;
-&amp;lt;h1&amp;gt;BASIC&amp;lt;/h1&amp;gt;
-&amp;lt;p&amp;gt;A Quick, Dirty and Ugly Basic interpreter&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;mailto:pjb+blog@informatimago.com&amp;quot;&amp;gt;Pascal J. Bourguignon&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;BASIC, Common Lisp, Lisp&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
-&amp;lt;/div&amp;gt;
-&amp;lt;div class=&amp;quot;document&amp;quot; id=&amp;quot;basic&amp;quot;&amp;gt;
+&lt;/div&gt;
+&lt;/div&gt;
+</content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry><entry><id>http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/basic/index.html</id><published>2003-05-19T12:00:00+0100</published><updated>2015-10-26T00:27:51+0100</updated><title type="text">BASIC</title><content type="html">&lt;div class=&quot;blog&quot;&gt;
+&lt;div class=&quot;header&quot;&gt;
+&lt;img src=&quot;http://www.informatimago.com/blog/dartmouth-basic.jpg&quot; height=&quot;100px&quot; class=&quot;floatRight&quot;&gt;&lt;/img&gt;
+&lt;h1&gt;&lt;a href=&quot;http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/basic/index.html&quot;&gt;BASIC&lt;/a&gt;&lt;/h1&gt;
+&lt;p&gt;A Quick, Dirty and Ugly Basic interpreter&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;&lt;a href=&quot;mailto:pjb+blog@informatimago.com&quot;&gt;Pascal J. Bourguignon&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
+&lt;p&gt;&lt;small&gt;BASIC, Common Lisp, Lisp&lt;/small&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div class=&quot;document&quot; id=&quot;basic&quot;&gt;


-&amp;lt;h1&amp;gt;BASIC&amp;lt;/h1&amp;gt;
+&lt;h1&gt;BASIC&lt;/h1&gt;



-&amp;lt;h2&amp;gt;A Quick, Dirty and Ugly Basic interpreter&amp;lt;/h2&amp;gt;
+&lt;h2&gt;A Quick, Dirty and Ugly Basic interpreter&lt;/h2&gt;




-&amp;lt;p&amp;gt;This is a silly BASIC interpreter, implemented in Common Lisp.&amp;lt;/p&amp;gt;
+&lt;p&gt;This is a silly BASIC interpreter, implemented in Common Lisp.&lt;/p&gt;




-&amp;lt;p&amp;gt;The lines are tokenized and stored as-is in an array indexed by
+&lt;p&gt;The lines are tokenized and stored as-is in an array indexed by
     the line number.  When interpreting the program, the instructions
     are parsed directly from there ; the expressions are parsed into
-    trees which are then evaluated.&amp;lt;/p&amp;gt;
+    trees which are then evaluated.&lt;/p&gt;




-&amp;lt;p&amp;gt;The variables are stored into a hash table indexed by their
-    identifier (symbol). Undefined variables are taken as 0 or &amp;quot;&amp;quot;.&amp;lt;/p&amp;gt;
+&lt;p&gt;The variables are stored into a hash table indexed by their
+    identifier (symbol). Undefined variables are taken as 0 or &quot;&quot;.&lt;/p&gt;




-&amp;lt;p&amp;gt;We distinguish number and string variables depending on the presence
-    of a &#039;$&#039; character in the last position of the variable identifier.&amp;lt;/p&amp;gt;
+&lt;p&gt;We distinguish number and string variables depending on the presence
+    of a &#039;$&#039; character in the last position of the variable identifier.&lt;/p&gt;




-&amp;lt;p&amp;gt;Variables are reset by the command RUN. (A program can be
+&lt;p&gt;Variables are reset by the command RUN. (A program can be
     restarted without losing the variable using the GOTO or GOSUB
     statements).  Commands are not distinguished from statements and
     may occur in a program. In particular, LOAD could be used to
     load a subprogram overlay, and takes a line number where to jump
-    to. &amp;lt;/p&amp;gt;
+    to. &lt;/p&gt;




-&amp;lt;p&amp;gt;Programs are loaded and saved in source form.&amp;lt;/p&amp;gt;
+&lt;p&gt;Programs are loaded and saved in source form.&lt;/p&gt;




-&amp;lt;ul&amp;gt;
+&lt;ul&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;basic.lisp&amp;quot;&amp;gt;basic.lisp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;basic.lisp&quot;&gt;basic.lisp&lt;/a&gt;&lt;/li&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;test1.basic&amp;quot;&amp;gt;test1.basic&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;test1.basic&quot;&gt;test1.basic&lt;/a&gt;&lt;/li&gt;



-&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;test2.basic&amp;quot;&amp;gt;test2.basic&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
+&lt;li&gt;&lt;a href=&quot;test2.basic&quot;&gt;test2.basic&lt;/a&gt;&lt;/li&gt;



-&amp;lt;/ul&amp;gt;
+&lt;/ul&gt;



-&amp;lt;/div&amp;gt;
-&amp;lt;/div&amp;gt;
+&lt;/div&gt;
+&lt;/div&gt;
 </content><link rel="self" type="application/atom+xml" href="http://www.informatimago.com/develop/lisp/com/informatimago/small-cl-pgms/basic/index.html"/><author><name>Pascal J. Bourguignon</name><email>pjb+blog@informatimago.com</email></author></entry></feed>
\ No newline at end of file
ViewGit