Some time ago we talked in this thread about pretty printing.

I think I should explain this a bit better.


On Wed, Dec 18, 2019 at 12:50:55PM -0800, C K Kashyap wrote:
>          (<row> (alternating)
>             (gui 1 '(+InsRowButton))
>             (if (let L (: chart 1 data) (and (car (nth L R)) (= "ABC" (get
> @ 'cmt)))) (gui 2 '(+TextField) 50 3) (gui 2 '(+TextField) 150 3))
>             (gui 3 '(+DateField))

I find this nearly impossible to read. In my reply I edited the last three lines
to

>     (if
>        (let L (: chart 1 data)
>           (and
>              (car (nth L R))
>              (= "ABC" (get @ 'cmt)) ) )
>        (gui 2 '(+TextField) 50 3)
>        (gui 2 '(+TextField) 150 3) )


But what are the rules?

PicoLisp uses the most simple algorithm:

   1. If the 'size' is 12 or less, print it
   2. Otherwise print an opening parenthesis and the CAR, then recursively print
      all elements in the CDR each on a new line and indented by 3 spaces. Then
      print a space and a closing parenthesis.

In code this is

   (de pretty (X N)
      (space (default N 0))
      (if (or (atom X) (>= 12 (size X)))
         (print X)
         (prin "(")
         (print (car X))
         (for Y (cdr X)
            (prinl)
            (pretty Y (+ N 3)) )
         (prin " )") )
      X )

The real 'pretty' and 'pp' functions in @lib.l do the same basically, just
employ some heuristics for built-in functions to print the first two or three
items instead of just the CAR.

For non-built-in functions like such GUI code we are free to put more stuff in a
line according to taste, because otherwise it expands vertically too much.

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to