commit 764cce7c7eb955ecad87625d0c433d5d1baad3e5
parent ba8a0ca1f44cd05383f99524044dc60b60e14e50
Author: Alexander Burger <abu@software-lab.de>
Date:   Mon,  9 May 2011 08:38:28 +0200
More clean-up
Diffstat:
4 files changed, 82 insertions(+), 62 deletions(-)
diff --git a/doc/tut.html b/doc/tut.html
@@ -342,8 +342,7 @@ and indented way.
 : (pp 'pretty)
 (de pretty (X N . @)
    (setq N (abs (space (or N 0))))
-   (while (args)
-      (printsp (next)) )
+   (while (args) (printsp (next)))
    (if (or (atom X) (>= 12 (size X)))
       (print X)
       (while (== 'quote (car X))
@@ -351,27 +350,34 @@ and indented way.
          (pop 'X) )
       (let Z X
          (prin "(")
-         (when (memq (print (pop 'X)) *PP)
-            (cond
-               ((memq (car Z) *PP1)
-                  (if (and (pair (car X)) (pair (cdar X)))
-                     (when (>= 12 (size (car X)))
+         (cond
+            ((memq (print (pop 'X)) *PP)
+               (cond
+                  ((memq (car Z) *PP1)
+                     (if (and (pair (car X)) (pair (cdar X)))
+                        (when (>= 12 (size (car X)))
+                           (space)
+                           (print (pop 'X)) )
                         (space)
-                        (print (pop 'X)) )
+                        (print (pop 'X))
+                        (when
+                           (or
+                              (atom (car X))
+                              (>= 12 (size (car X))) )
+                           (space)
+                           (print (pop 'X)) ) ) )
+                  ((memq (car Z) *PP2)
+                     (inc 'N 3)
+                     (loop
+                        (prinl)
+                        (pretty (cadr X) N (car X))
+                        (NIL (setq X (cddr X)) (space)) ) )
+                  ((or (atom (car X)) (>= 12 (size (car X))))
                      (space)
-                     (print (pop 'X))
-                     (when (or (atom (car X)) (>= 12 (size (car X))))
-                        (space)
-                        (print (pop 'X)) ) ) )
-               ((memq (car Z) *PP2)
-                  (inc 'N 3)
-                  (loop
-                     (prinl)
-                     (pretty (cadr X) N (car X))
-                     (NIL (setq X (cddr X)) (space)) ) )
-               ((or (atom (car X)) (>= 12 (size (car X))))
-                  (space)
-                  (print (pop 'X)) ) ) )
+                     (print (pop 'X)) ) ) )
+            ((and (memq (car Z) *PP3) (>= 12 (size (head 2 X))))
+               (space)
+               (print (pop 'X) (pop 'X)) ) )
          (when X
             (loop
                (T (== Z X) (prin " ."))
@@ -453,8 +459,8 @@ somewhere in their value or property list.
 
 <pre><code>
 : (who 'print)
--> ((print> . +relation) query show select pretty "edit" msg rules pp more
-(print> . +Date)) </code></pre>
+-> (query pretty pp msg more "edit" view show (print> . +Date) rules select
+(print> . +relation))</code></pre>
 
 <p>A dotted pair indicates either a method definition or a property entry. So
 <code>(print> . +relation)</code> denotes the <code>print></code> method of
@@ -465,10 +471,20 @@ the <code><a href="refR.html#+relation">+relation</a></code> class.
 
 <pre><code>
 : (more (who 'print) pp)
-(dm (print> . +relation) (Val)   # Pretty-print these functions one by one
-   (print Val) )
+(de query ("Q" "Dbg")  # Pretty-print these functions one by one
+   (use "R"
+      (loop
+         (NIL (prove "Q" "Dbg"))
+         (T (=T (setq "R" @)) T)
+         (for X "R"
+            (space)
+            (print (car X))
+            (print '=)
+            (print (cdr X))
+            (flush) )
+         (T (line)) ) ) )
 
-(de query ("Q" "Dbg")
+(de pretty (X N . @)
    ...
 </code></pre>
 
@@ -497,10 +513,11 @@ list is suitable for iteration with <code>pp</code>:
 
 <pre><code>
 : (can 'del>)                                   # Which classes accept 'del>' ?
--> ((del> . +relation) (del> . +Entity) (del> . +List))
+-> ((del> . +List) (del> . +Entity) (del> . +relation))
+
 : (more (can 'del>) pp)                         # Inspect the methods with 'pp'
-(dm (del> . +relation) (Obj Old Val)
-   (and (<> Old Val) Val) )
+(dm (del> . +List) (Obj Old Val)
+   (and ((<> Old Val) (delete Val Old)) )
 
 (dm (del> . +Entity) (Var Val)
    (when
@@ -513,10 +530,12 @@ list is suitable for iteration with <code>pp</code>:
             This
             Old
             (put This Var (del> (meta This Var) This Old @)) )
+         (when (asoq Var (meta This 'Aux))
+            (relAux This Var Old (cdr @)) )
          (upd> This Var Old) ) ) )
 
-(dm (del> . +List) (Obj Old Val)
-   (and (<> Old Val) (delete Val Old)) )
+(dm (del> . +relation) (Obj Old Val)
+   (and ((<> Old Val) Val) )
 </code></pre>
 
 <h3>Inspect dependencies with <i>dep</i></h3>
@@ -531,17 +550,17 @@ class hierarchy. That is, for a given class it displays the tree of its
 <pre><code>
 : (dep '+relation)
 +relation
-   +Number
-      +Time
-      +Date
-   +Symbol
-      +String
+   +Bag
+   +Any
    +Blob
    +Link
       +Joint
    +Bool
-   +Any
-   +Bag
+   +Symbol
+      +String
+   +Number
+      +Time
+      +Date
 -> +relation
 </code></pre>
 
@@ -599,6 +618,7 @@ Hello world
 : (de hello (X)
    (prinl "Hello " X) )
 # hello redefined
+-> hello
 </code></pre>
 
 <p>PicoLisp informs you that you have just redefined the function. This might be
@@ -755,7 +775,7 @@ also <a href="faq.html#lambda">this FAQ entry</a>).
 </code></pre>
 
 <pre><code>
-: (setq f '((X) (* X X)))
+: (setq f '((X) (* X X)))  # This is equivalent to (de f (X) (* X X))
 -> ((X) (* X X))
 : f
 -> ((X) (* X X))
@@ -786,7 +806,7 @@ exited.
 
 <p>For demonstration, let's define the unavoidable factorial function (or just
 <code><a href="refL.html#load">load</a></code> the file "<code><a
-href="fun.l">doc/fun.l</a></code>"):
+href="fun.l">@doc/fun.l</a></code>"):
 
 <pre><code>
 (de fact (N)
@@ -1040,7 +1060,7 @@ href="refI.html#in">in</a></code>. Note that comments and white space are
 automatically skipped by <code>read</code>:
 
 <pre><code>
-: (in "doc/fun.l" (read))
+: (in "@doc/fun.l" (read))
 -> (de fact (N) (if (=0 N) 1 (* N (fact (dec N)))))
 </code></pre>
 
@@ -1049,7 +1069,7 @@ directly. To get the first non-white character in the file with <code><a
 href="refC.html#char">char</a></code>:
 
 <pre><code>
-: (in "doc/fun.l" (skip "#") (char))
+: (in "@doc/fun.l" (skip "#") (char))
 -> "("
 </code></pre>
 
@@ -1059,7 +1079,7 @@ stream for given patterns. Typically, this is not done with Lisp source files
 immediately following <code>fact</code> in the file,
 
 <pre><code>
-: (in "doc/fun.l" (while (from "fact ") (println (read))))
+: (in "@doc/fun.l" (while (from "fact ") (println (read))))
 (N)
 (dec N)
 </code></pre>
@@ -1068,7 +1088,7 @@ immediately following <code>fact</code> in the file,
 href="refT.html#till">till</a></code>:
 
 <pre><code>
-: (in "doc/fun.l" (from "(de ") (till " " T)))
+: (in "@doc/fun.l" (from "(de ") (till " " T)))
 -> "fact"
 </code></pre>
 
@@ -1078,14 +1098,14 @@ read, either into a single <a href="ref.html#transient-io">transient</a> symbol
 (the type used by PicoLisp for strings),
 
 <pre><code>
-: (in "doc/tut.html" (line T))
+: (in "@doc/tut.html" (line T))
 -> "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://..."
 </code></pre>
 
 <p>or into a list of symbols (characters):
 
 <pre><code>
-: (in "doc/tut.html" (line))
+: (in "@doc/tut.html" (line))
 -> ("<" "!" "D" "O" "C" "T" "Y" "P" "E" " " "H" "T" "M" "L" ...
 </code></pre>
 
@@ -1112,7 +1132,7 @@ fields. A typical way to import the contents of such a file is:
    (out "b"                                     # from file "a" to file "b"
       (echo 40) ) )
 
-(in "doc/tut.html"                              # Show the HTTP-header
+(in "@doc/tut.html"                             # Show the HTTP-header
    (line)
    (echo "<body>") )
 
@@ -1321,11 +1341,11 @@ site, and prints it to standard output:
 
 <p>We recommend that you have a terminal window open, and try the examples by
 yourself. You may either type them in, directly to the PicoLisp interpreter, or
-edit a separate source file (e.g. <code>"doc/fun.l"</code>) in a second terminal
-window and load it into PicoLisp with
+edit a separate source file (e.g. <code>"@doc/fun.l"</code>) in a second
+terminal window and load it into PicoLisp with
 
 <pre><code>
-: (load "doc/fun.l")
+: (load "@doc/fun.l")
 </code></pre>
 
 <p>each time you have modified and saved it.
@@ -1388,7 +1408,7 @@ hierarchy of geometric shapes, with a base class <code>+Shape</code> and two
 subclasses <code>+Rectangle</code> and <code>+Circle</code>.
 
 <p>The source code is included as "<code><a
-href="shape.l">doc/shape.l</a></code>" in the PicoLisp distribution, so you
+href="shape.l">@doc/shape.l</a></code>" in the PicoLisp distribution, so you
 don't have to type it in. Just <code><a href="refL.html#load">load</a></code>
 the file, or start it from the shell as:
 
@@ -1780,7 +1800,7 @@ entity/relation class framework (see also <a href="ref.html#dbase">Database</a>)
 which allows a close mapping of the application data structure to the database.
 
 <p>We provided a simple yet complete database and GUI demo application in
-<code><a href="family.l">doc/family.l</a></code>. We recommend to start it up
+<code><a href="family.l">@doc/family.l</a></code>. We recommend to start it up
 for test purposes in the following way:
 
 <pre><code>
@@ -2039,10 +2059,10 @@ XHTML/CSS framework with the optional use of JavaScript.
 
 <p>Before we explain the GUI of our demo database application, we present a
 minimal example for a plain HTML-GUI in <code><a
-href="hello.l">doc/hello.l</a></code>. Start the application server as:
+href="hello.l">@doc/hello.l</a></code>. Start the application server as:
 
 <pre><code>
-$ pil @lib/http.l -'server 8080 "doc/hello.l"' -wait
+$ pil @lib/http.l -'server 8080 "@doc/hello.l"' -wait
 </code></pre>
 
 <p>Now point your browser to the address '<code><a
@@ -2056,7 +2076,7 @@ window.
 
 <p>In our demo database application, a single function <code>person</code> is
 responsible for the whole GUI. Again, please look at <code><a
-href="family.l">doc/family.l</a></code>.
+href="family.l">@doc/family.l</a></code>.
 
 <p>To start the database <i>and</i> the application server, call:
 
@@ -2065,7 +2085,7 @@ $ pil @doc/family.l -main -go +
 </code></pre>
 
 <p>As before, the database is opened with <code>main</code>. The function
-<code>go</code> is also defined in <code>doc/family.l</code>:
+<code>go</code> is also defined in <code>@doc/family.l</code>:
 
 <pre><code>
 (de go ()
@@ -2081,7 +2101,7 @@ href="http://localhost:8080" target="GUI">http://localhost:8080</a></code>'.
 
 <p>You should see a new browser window with an input form created by the
 function <code>person</code>. We provided an initial database in
-"doc/family/[1-4]". You can navigate through it by clicking on the pencil icons
+"@doc/family/[1-4]". You can navigate through it by clicking on the pencil icons
 besides the input fields.
 
 <p>The chart with the children data can be scrolled using the down
@@ -2211,7 +2231,7 @@ to the <a href="ref.html#pilog">Pilog</a> section of the PicoLisp Reference for
 the basic usage of Pilog.
 
 <p>Again, we use our demo application <code><a
-href="family.l">doc/family.l</a></code> that was introduced in the <a
+href="family.l">@doc/family.l</a></code> that was introduced in the <a
 href="#db">Database Programming</a> section.
 
 <p>Normally, Pilog is used either interactively to query the database during
@@ -2363,7 +2383,7 @@ kids nm)</code>
 
 <p>A more typical and extensive example for the usage of <code>select</code> can
 be found in the <code>qPerson</code> function in <code><a
-href="family.l">doc/family.l</a></code>. It is used in the search dialog of the
+href="family.l">@doc/family.l</a></code>. It is used in the search dialog of the
 demo application, and searches for a person with the name, the parents' and
 partner's names, the occupation and a time range for the birth date. The
 relevant index trees in the database are searched (actually only those trees
diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar
Binary files differ.
diff --git a/src/vers.h b/src/vers.h
@@ -1 +1 @@
-static byte Version[4] = {3,0,6,8};
+static byte Version[4] = {3,0,6,9};
diff --git a/src64/version.l b/src64/version.l
@@ -1,6 +1,6 @@
-# 05may11abu
+# 09may11abu
 # (c) Software Lab. Alexander Burger
 
-(de *Version 3 0 6 8)
+(de *Version 3 0 6 9)
 
 # vi:et:ts=3:sw=3