Guest User

pretty printing in picolisp with helper functions

a guest
Sep 2nd, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.75 KB | None | 0 0
  1. (setq pretty '((X N)
  2.    (setq N (abs (space (or N 0))))
  3.    (while (and (pair X) (== 'quote (car X)))
  4.       (prin "'")
  5.       (++ X) )
  6.    (cond
  7.       ((atom X) (print X))
  8.       ((memq (car X) '(de dm redef))
  9.          (_pretty
  10.             (spPrt (++ X))
  11.             (spPrt (++ X))
  12.             (prtty1 X N Z) ) )
  13.       ((memq (car X) '(let let?))
  14.          (_pretty
  15.             (cond
  16.                ((atom (car X))
  17.                   (spPrt (++ X))
  18.                   (prtty? (++ X) N) )
  19.                ((>= 12 (size (car X)))
  20.                   (prin " (")
  21.                   (let Z (++ X)
  22.                      (prtty2 Z NIL Z) )
  23.                   (prin ")") )
  24.                (T (nlPrt N)
  25.                   (prin "(")
  26.                   (let Z (++ X)
  27.                      (prtty2 Z (+ N 3) Z) )
  28.                   (prin " )") ) )
  29.             (prtty1 X N Z) ) )
  30.       ((== 'for (car X))
  31.          (_pretty
  32.             (cond
  33.                ((or (atom (car X)) (atom (cdar X)))
  34.                   (spPrt (++ X))
  35.                   (prtty? (++ X) N) )
  36.                ((>= 12 (size (car X)))
  37.                   (spPrt (++ X)) )
  38.                (T (nlPrt N)
  39.                   (prtty0 (++ X) (+ 3 N)) ) )
  40.             (prtty1 X N Z) ) )
  41.       ((== 'if2 (car X))
  42.          (_pretty
  43.             (when (>= 12 (size (head 2 X)))
  44.                (spPrt (++ X))
  45.                (spPrt (++ X)) )
  46.             (prtty1 X N Z) ) )
  47.       ((memq (car X) '(while until do state finally co))
  48.          (prtty3 X N) )
  49.       ((>= 12 (size X))
  50.          (ifn (memq (car X) '(set setq default))
  51.             (print X)
  52.             (prin "(")
  53.             (let Z X
  54.                (printsp (++ X))
  55.                (prtty2 X NIL Z) )
  56.             (prin ")") ) )
  57.       ((memq (car X) '(=: use later recur tab new))
  58.          (_pretty
  59.             (space)
  60.             (print (++ X))
  61.             (prtty1 X N Z) ) )
  62.       ((memq (car X) '(set setq default))
  63.          (_pretty
  64.             (if (cdddr X)
  65.                (prog (nlPrt N) (prtty2 X N Z))
  66.                (spPrt (++ X))
  67.                (nlPrt1 (++ X) N) ) ) )
  68.       ((memq
  69.             (car X)
  70.             '(T NIL
  71.                !
  72.                if
  73.                ifn
  74.                when
  75.                unless
  76.                case
  77.                casq
  78.                with
  79.                catch
  80.                throw
  81.                push
  82.                bind
  83.                job
  84.                in
  85.                out
  86.                err
  87.                ctl ) )
  88.          (prtty3 X N) )
  89.       (T (prtty0 X N)) ) ) )
  90.  
  91. (setq prtty?
  92. '((X N)
  93.    (ifn (or (atom X) (>= 12 (size X)))
  94.       (nlPrt1 X N)
  95.       (spPrt X) ) ) )
  96.  
  97. (setq _pretty
  98. '("Prg"
  99.    (prin "(")
  100.    (let Z X
  101.       (print (++ X))
  102.       (run "Prg") )
  103.    (prin " )") )
  104. )
  105.  
  106. (setq prtty0 '((X N)
  107.    (prin "(")
  108.    (let Z X
  109.       (pretty (++ X) (- -3 N))
  110.       (prtty1 X N Z) )
  111.    (prin " )") ) )
  112.  
  113.  
  114. (setq prtty1
  115. ' ((X N Z)
  116.    (loop
  117.       (NIL X)
  118.       (T (== Z X) (prin " ."))
  119.       (T (atom X) (prin " . ") (print X))
  120.       (nlPrt1 (++ X) N) ) ) )
  121.  
  122. (setq prtty2
  123. '((X N Z)
  124.    (loop
  125.       (print (++ X))
  126.       (NIL X)
  127.       (T (== Z X) (prin " ."))
  128.       (T (atom X) (prin " . ") (print X))
  129.       (if N
  130.          (prtty? (++ X) N)
  131.          (space)
  132.          (print (++ X)) )
  133.       (NIL X)
  134.       (T (== Z X) (prin " ."))
  135.       (T (atom X) (prin " . ") (print X))
  136.       (if N (nlPrt N) (space 2)) ) ) )
  137.  
  138. (setq pretty3 '((X N)
  139.    (prin "(")
  140.    (let Z X
  141.       (print (++ X))
  142.       (when
  143.          (or
  144.             (atom (car X))
  145.             (>= 12 (size (car X))) )
  146.          (spPrt (++ X)) )
  147.       (when X (prtty1 X N Z) (space)) )
  148.    (prin ")") ) )
  149.  
  150. (setq nlPrt1 '((X N) (prinl) (pretty X (+ 3 N)))
  151.  
  152. (setq spPrt '((X) (space) (print X))-> ((X) (space) (print X)))
Advertisement
Add Comment
Please, Sign In to add comment