================================================================================
Block Comments
================================================================================

#|(ql.foo:quickload "cl-project")
(defun add (a b) |
    (+ a b ))|#

(add 8 9)

--------------------------------------------------------------------------------

(source
  (block_comment)
  (list_lit
    (sym_lit)
    (num_lit)
    (num_lit)))

================================================================================
Block Comments 2
================================================================================

(add #|8 |#9)

--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (block_comment)
    (num_lit)))

================================================================================
Quasi-Quoting
================================================================================

`(add a ,(b))
`(add a ,@(b))
`(add a , b)
`(add a ,b)

--------------------------------------------------------------------------------

(source
  (syn_quoting_lit
    (list_lit
      (sym_lit)
      (sym_lit)
      (unquoting_lit
        (list_lit
          (sym_lit)))))
  (syn_quoting_lit
    (list_lit
      (sym_lit)
      (sym_lit)
      (unquote_splicing_lit
        (list_lit
          (sym_lit)))))
  (syn_quoting_lit
    (list_lit
      (sym_lit)
      (sym_lit)
      (unquoting_lit
        (sym_lit))))
  (syn_quoting_lit
    (list_lit
      (sym_lit)
      (sym_lit)
      (unquoting_lit
        (sym_lit)))))

================================================================================
Fancy Literal
================================================================================

(|`(add a ,(b))| a)

--------------------------------------------------------------------------------

(source
  (list_lit
    (fancy_literal)
    (sym_lit)))

================================================================================
Defun header
================================================================================
(defun a (a b)
  (car 1 2)
  2)
( defun a (a b)
  (car 1 2)
  2)

(defmethod input-gradient :around
    (lazy-array output-gradient index)
  (let ((input (nth index (lazy-array-inputs lazy-array)))
        (value (call-next-method)))
    (if (petalisp.type-inference:ntype=
         (element-ntype value)
         (element-ntype input))
        value
        (lazy #'coerce value (element-type input)))))
--------------------------------------------------------------------------------

(source
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (sym_lit)
        (list_lit
          (sym_lit)
          (sym_lit)))
      (list_lit
        (sym_lit)
        (num_lit)
        (num_lit))
      (num_lit)))
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (sym_lit)
        (list_lit
          (sym_lit)
          (sym_lit)))
      (list_lit
        (sym_lit)
        (num_lit)
        (num_lit))
      (num_lit)))
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (sym_lit)
        (kwd_lit
          (kwd_symbol))
        (list_lit
          (sym_lit)
          (sym_lit)
          (sym_lit)))
      (list_lit
        (sym_lit)
        (list_lit
          (list_lit
            (sym_lit)
            (list_lit
              (sym_lit)
              (sym_lit)
              (list_lit
                (sym_lit)
                (sym_lit))))
          (list_lit
            (sym_lit)
            (list_lit
              (sym_lit))))
        (list_lit
          (sym_lit)
          (list_lit
            (package_lit
              (sym_lit)
              (sym_lit))
            (list_lit
              (sym_lit)
              (sym_lit))
            (list_lit
              (sym_lit)
              (sym_lit)))
          (sym_lit)
          (list_lit
            (sym_lit)
            (var_quoting_lit
              (sym_lit))
            (sym_lit)
            (list_lit
              (sym_lit)
              (sym_lit))))))))

================================================================================
Vectors
================================================================================

#(  2 3 4)
#()

--------------------------------------------------------------------------------

(source
  (vec_lit
    (list_lit
      (num_lit)
      (num_lit)
      (num_lit)))
  (vec_lit
    (list_lit)))

================================================================================
Arrays
================================================================================

#0A2
#0A#C(1 2)
#2A((2 3 4))

--------------------------------------------------------------------------------

(source
  (vec_lit
    (num_lit))
  (vec_lit
    (complex_num_lit
      (num_lit)
      (num_lit)))
  (vec_lit
    (array_dimension)
    (list_lit
      (list_lit
        (num_lit)
        (num_lit)
        (num_lit)))))

================================================================================
Loop Macro
================================================================================

(cl:loop for dim-idx in xyz
                 for letter in (list 'x 'y 'z)
                 collect (let ((current-range (nth dim-idx iteration-ranges)))
                           `(, (get-counter-symbol dim-idx) 
                               (+ ,(range-start current-range)
                                  (* ,(range-step current-range)
                                     ,(case letter 
                                        (x '(+ thread-idx-x (* block-idx-x block-dim-x)))
                                        (y '(+ thread-idx-y (* block-idx-y block-dim-y)))
                                        (z '(+ thread-idx-z (* block-idx-z block-dim-z)))))))))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (sym_lit)))
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (list_lit
            (sym_lit)
            (quoting_lit
              (sym_lit))
            (quoting_lit
              (sym_lit))
            (quoting_lit
              (sym_lit)))))
      (loop_clause
        (accumulation_clause
          (accumulation_verb)
          (list_lit
            (sym_lit)
            (list_lit
              (list_lit
                (sym_lit)
                (list_lit
                  (sym_lit)
                  (sym_lit)
                  (sym_lit))))
            (syn_quoting_lit
              (list_lit
                (unquoting_lit
                  (list_lit
                    (sym_lit)
                    (sym_lit)))
                (list_lit
                  (sym_lit)
                  (unquoting_lit
                    (list_lit
                      (sym_lit)
                      (sym_lit)))
                  (list_lit
                    (sym_lit)
                    (unquoting_lit
                      (list_lit
                        (sym_lit)
                        (sym_lit)))
                    (unquoting_lit
                      (list_lit
                        (sym_lit)
                        (sym_lit)
                        (list_lit
                          (sym_lit)
                          (quoting_lit
                            (list_lit
                              (sym_lit)
                              (sym_lit)
                              (list_lit
                                (sym_lit)
                                (sym_lit)
                                (sym_lit)))))
                        (list_lit
                          (sym_lit)
                          (quoting_lit
                            (list_lit
                              (sym_lit)
                              (sym_lit)
                              (list_lit
                                (sym_lit)
                                (sym_lit)
                                (sym_lit)))))
                        (list_lit
                          (sym_lit)
                          (quoting_lit
                            (list_lit
                              (sym_lit)
                              (sym_lit)
                              (list_lit
                                (sym_lit)
                                (sym_lit)
                                (sym_lit)))))))))))))))))

================================================================================
Loop Macro (Accumulation)
================================================================================

(loop for i below 10
      collect x into a)
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (num_lit)))
      (loop_clause
        (accumulation_clause
          (accumulation_verb)
          (sym_lit)
          (sym_lit))))))

================================================================================
Loop Macro (finally)
================================================================================

(loop for a below 8
      for x = (+  a)
      with first-x = (+  a)
      if (> x 10) return x
      do (format t "~A ~A~%" x first-x)
      finally (return 3))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (num_lit)))
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (with_clause
          (sym_lit)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (condition_clause
          (list_lit
            (sym_lit)
            (sym_lit)
            (num_lit))))
      (loop_clause
        (termination_clause
          (sym_lit)))
      (loop_clause
        (do_clause
          (list_lit
            (sym_lit)
            (sym_lit)
            (str_lit
              (format_specifier
                (format_directive_type))
              (format_specifier
                (format_directive_type))
              (format_specifier
                (format_directive_type)))
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (termination_clause
          (list_lit
            (sym_lit)
            (num_lit)))))))

================================================================================
Loop Macro (do do do)
================================================================================

(loop for a below 8
      for x = (+  a)
      with first-x = (+  a)
      if (> x 10) return x
      do (format t "~A ~A~%" x first-x) (format t "~A ~A~%" x first-x)
      finally (return 3))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (num_lit)))
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (with_clause
          (sym_lit)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (condition_clause
          (list_lit
            (sym_lit)
            (sym_lit)
            (num_lit))))
      (loop_clause
        (termination_clause
          (sym_lit)))
      (loop_clause
        (do_clause
          (list_lit
            (sym_lit)
            (sym_lit)
            (str_lit
              (format_specifier
                (format_directive_type))
              (format_specifier
                (format_directive_type))
              (format_specifier
                (format_directive_type)))
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (list_lit
          (sym_lit)
          (sym_lit)
          (str_lit
            (format_specifier
              (format_directive_type))
            (format_specifier
              (format_directive_type))
            (format_specifier
              (format_directive_type)))
          (sym_lit)
          (sym_lit)))
      (loop_clause
        (termination_clause
          (list_lit
            (sym_lit)
            (num_lit)))))))

================================================================================
Conses
================================================================================

(2 . 3)
(2 . ( 2 3))
--------------------------------------------------------------------------------

(source
  (list_lit
    (num_lit)
    (num_lit))
  (list_lit
    (num_lit)
    (list_lit
      (num_lit)
      (num_lit))))

================================================================================
Complex Numbers
================================================================================

#C(2 3)
#C
( 2 1)

#C(-2 1)
--------------------------------------------------------------------------------

(source
  (complex_num_lit
    (num_lit)
    (num_lit))
  (complex_num_lit
    (num_lit)
    (num_lit))
  (complex_num_lit
    (num_lit)
    (num_lit)))

================================================================================
Reader Macros
================================================================================
#+unix(loop)

#+windows
(loop)

--------------------------------------------------------------------------------

(source
  (include_reader_macro
    (sym_lit)
    (list_lit
      (loop_macro)))
  (include_reader_macro
    (sym_lit)
    (list_lit
      (loop_macro))))

================================================================================
Packages
================================================================================

foo:baz
foo.bar:baz
(foo.bar:baz)
--------------------------------------------------------------------------------

(source
  (package_lit
    (sym_lit)
    (sym_lit))
  (package_lit
    (sym_lit)
    (sym_lit))
  (list_lit
    (package_lit
      (sym_lit)
      (sym_lit))))

================================================================================
Keywords
================================================================================

:foo

:foo.bar
--------------------------------------------------------------------------------

(source
  (kwd_lit
    (kwd_symbol))
  (kwd_lit
    (kwd_symbol)))

================================================================================
Functions with numbers (TODO!!!)
================================================================================

1+
1-
--------------------------------------------------------------------------------

(source
  (sym_lit)
  (sym_lit))

================================================================================
Petalisp shapes
================================================================================

(~ (* w h) ~ 128)
--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (list_lit
      (sym_lit)
      (sym_lit)
      (sym_lit))
    (sym_lit)
    (num_lit)))

================================================================================
Chars
================================================================================

#\?
#\,
#\-
#\:
#\/
--------------------------------------------------------------------------------

(source
  (char_lit)
  (char_lit)
  (char_lit)
  (char_lit)
  (char_lit))

================================================================================
Dotted literals
================================================================================

foo.bar
foo. bar
.bar
#.bar
--------------------------------------------------------------------------------

(source
  (sym_lit)
  (sym_lit)
  (sym_lit)
  (sym_lit)
  (sym_lit))

================================================================================
Loop (else)
================================================================================

(loop for input-index from 0
                     for input-constraint across (transformation-input-mask transformation)
                     if (not input-constraint)
                       collect (transformation-input-symbol input-index)
                     else
                       collect input-constraint)
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (num_lit)))
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (condition_clause
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (accumulation_clause
          (accumulation_verb)
          (list_lit
            (sym_lit)
            (sym_lit))))
      (loop_clause
        (condition_clause))
      (loop_clause
        (accumulation_clause
          (accumulation_verb)
          (sym_lit))))))

================================================================================
Multiple gaps in Loop
================================================================================

(defmethod cl-dot:graph-object-points-to
    ((graph any-graph) node)
  (loop for edge in (graphviz-potential-edges graph node)
        append
        ;; There must be a more graceful way to loop over sequences...
        (loop for target in (coerce (graphviz-outgoing-edge-targets graph edge node) 'list)
              for edge-number from 0
              collect
              (make-instance 'cl-dot:attributed
                :attributes (graphviz-edge-attributes graph edge node target edge-number)
                :object target))))

--------------------------------------------------------------------------------

(source
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (package_lit
          (sym_lit)
          (sym_lit))
        (list_lit
          (list_lit
            (sym_lit)
            (sym_lit))
          (sym_lit)))
      (list_lit
        (loop_macro
          (loop_clause
            (for_clause
              (sym_lit)
              (for_clause_word)
              (list_lit
                (sym_lit)
                (sym_lit)
                (sym_lit))))
          (loop_clause
            (accumulation_clause
              (accumulation_verb)
              (comment)
              (list_lit
                (loop_macro
                  (loop_clause
                    (for_clause
                      (sym_lit)
                      (for_clause_word)
                      (list_lit
                        (sym_lit)
                        (list_lit
                          (sym_lit)
                          (sym_lit)
                          (sym_lit)
                          (sym_lit))
                        (quoting_lit
                          (sym_lit)))))
                  (loop_clause
                    (for_clause
                      (sym_lit)
                      (for_clause_word)
                      (num_lit)))
                  (loop_clause
                    (accumulation_clause
                      (accumulation_verb)
                      (list_lit
                        (sym_lit)
                        (quoting_lit
                          (package_lit
                            (sym_lit)
                            (sym_lit)))
                        (kwd_lit
                          (kwd_symbol))
                        (list_lit
                          (sym_lit)
                          (sym_lit)
                          (sym_lit)
                          (sym_lit)
                          (sym_lit)
                          (sym_lit))
                        (kwd_lit
                          (kwd_symbol))
                        (sym_lit)))))))))))))

================================================================================
Unquoting in defun 2
================================================================================
 `((defmacro ,name))
 `((defmacro ,name))
 `((defmacro ,name)
         ,(function-location (macro-function name)))
--------------------------------------------------------------------------------

(source
  (syn_quoting_lit
    (list_lit
      (list_lit
        (defun
          (defun_header
            (defun_keyword)
            (unquoting_lit
              (sym_lit)))))))
  (syn_quoting_lit
    (list_lit
      (list_lit
        (defun
          (defun_header
            (defun_keyword)
            (unquoting_lit
              (sym_lit)))))))
  (syn_quoting_lit
    (list_lit
      (list_lit
        (defun
          (defun_header
            (defun_keyword)
            (unquoting_lit
              (sym_lit)))))
      (unquoting_lit
        (list_lit
          (sym_lit)
          (list_lit
            (sym_lit)
            (sym_lit)))))))

================================================================================
Weird quoting
================================================================================

(deftype worker-pool-workers ()
  `simple-vector)

--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (sym_lit)
    (list_lit)
    (syn_quoting_lit
      (sym_lit))))

================================================================================
Num Literals
================================================================================

0f
(deftype zero ()
  '(member 0 0S0 -0S0 0F0 -0F0 0D0 -0D0 0L0 -0L0
    #C(0S0 0S0) #C(0S0 -0S0) #C(-0S0 0S0) #C(-0S0 -0S0)
    #C(0F0 0F0) #C(0F0 -0F0) #C(-0F0 0F0) #C(-0F0 -0F0)
    #C(0D0 0D0) #C(0D0 -0D0) #C(-0D0 0D0) #C(-0D0 -0D0)
    #C(0L0 0L0) #C(0L0 -0L0) #C(-0L0 0L0) #C(-0L0 -0L0)))
--------------------------------------------------------------------------------

(source
  (sym_lit)
  (list_lit
    (sym_lit)
    (sym_lit)
    (list_lit)
    (quoting_lit
      (list_lit
        (sym_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (num_lit)
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))
        (complex_num_lit
          (num_lit)
          (num_lit))))))

================================================================================
Format
================================================================================

"~S" 	
"~3,-4:@s"
	
"~,+4S"

(format T "~8,0b" 5)
(format T "~v,'0b" 8 5)
(load "~/quicklisp/setup")

2
(load "~/foo:quicklisp/setup")

--------------------------------------------------------------------------------

(source
  (str_lit
    (format_specifier
      (format_directive_type)))
  (str_lit
    (format_specifier
      (format_modifiers
        (num_lit)
        (num_lit))
      (format_directive_type)))
  (str_lit
    (format_specifier
      (format_directive_type
        (num_lit))))
  (list_lit
    (sym_lit)
    (sym_lit)
    (str_lit
      (format_specifier
        (format_directive_type
          (num_lit)
          (num_lit))))
    (num_lit))
  (list_lit
    (sym_lit)
    (sym_lit)
    (str_lit
      (format_specifier
        (format_prefix_parameters)
        (format_directive_type
          (char_lit))))
    (num_lit)
    (num_lit))
  (list_lit
    (sym_lit)
    (str_lit
      (format_specifier
        (format_directive_type
          (sym_lit)))))
  (num_lit)
  (list_lit
    (sym_lit)
    (str_lit
      (format_specifier
        (format_directive_type
          (package_lit
            (sym_lit)
            (sym_lit)))))))

================================================================================
Path Literals
================================================================================

#P"t/global_kernel.ptx"
#P"~/dev/foo"

--------------------------------------------------------------------------------

(source
  (path_lit
    (str_lit))
  (path_lit
    (str_lit)))

================================================================================
Weird error
================================================================================

(in-package :common-lisp-user)
(cl:in-package #:common-lisp-user)

--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (kwd_lit
      (kwd_symbol)))
  (list_lit
    (package_lit
      (sym_lit))
    (kwd_lit
      (kwd_symbol))))

================================================================================
Trailing sharps
================================================================================


(sequence #a#)
(sequence #1#)
--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (sym_lit))
  (list_lit
    (sym_lit)
    (self_referential_reader_macro)))

================================================================================
https://lisptips.com/post/44370032877/literal-syntax-for-integers
================================================================================

#2r11010101  ;Another way of writing 213 decimal  
#b11010101   ;Ditto                               
#b+11010101  ;Ditto                               
#o325        ;Ditto, in octal radix               
#xD5         ;Ditto, in hexadecimal radix         
#16r+D5      ;Ditto                               
#o-300       ;Decimal -192, written in base 8     
#3r-21010    ;Same thing in base 3                
#25R-7H      ;Same thing in base 25               
#xACCEDED    ;181202413, in hexadecimal radix
--------------------------------------------------------------------------------

(source
  (num_lit)
  (comment)
  (num_lit)
  (comment)
  (num_lit)
  (comment)
  (num_lit)
  (comment)
  (num_lit)
  (comment)
  (sym_lit)
  (comment)
  (num_lit)
  (comment)
  (sym_lit)
  (comment)
  (sym_lit)
  (comment)
  (num_lit)
  (comment))

================================================================================
Self-references
================================================================================
(let ((position (mismatch #1="MemTotal:" line)))
                             (when (= position (length #1#))
                               (return
                                 (parse-size line :start position))))
--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (list_lit
      (list_lit
        (sym_lit)
        (list_lit
          (sym_lit)
          (self_referential_reader_macro)
          (str_lit)
          (sym_lit))))
    (list_lit
      (sym_lit)
      (list_lit
        (sym_lit)
        (sym_lit)
        (list_lit
          (sym_lit)
          (self_referential_reader_macro)))
      (list_lit
        (sym_lit)
        (list_lit
          (sym_lit)
          (sym_lit)
          (kwd_lit
            (kwd_symbol))
          (sym_lit))))))

================================================================================
@ in defun identifiers
================================================================================
;; this highlights properly
(defun foo (bar)                                                                                                                                                                                         
  (baz))                                                                                                                                                                                                     

;; this doesn't and breaks all highlighting below                                                                                                                                                                                                        
(defun @foo (bar)                                                                                                                                                                                        
  (baz))
--------------------------------------------------------------------------------

(source
  (comment)
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (sym_lit)
        (list_lit
          (sym_lit)))
      (list_lit
        (sym_lit))))
  (comment)
  (list_lit
    (defun
      (defun_header
        (defun_keyword)
        (sym_lit)
        (list_lit
          (sym_lit)))
      (list_lit
        (sym_lit)))))

================================================================================
Issue #5 (defpackage)
================================================================================
(defpackage foo-bar
  (:use cl))
--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (sym_lit)
    (list_lit
      (kwd_lit
        (kwd_symbol))
      (package_lit))))

================================================================================
Issue #6 (#\Replacement_Character)
================================================================================
#\Replacement_Character
--------------------------------------------------------------------------------

(source
  (char_lit))

================================================================================
loop with
================================================================================
(loop with values)
(loop with values = a)
(loop with values
  finally
  (return values))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)))))
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)
          (sym_lit)))))
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)))
      (loop_clause
        (termination_clause
          (list_lit
            (sym_lit)
            (sym_lit)))))))

================================================================================
loop with 2
================================================================================
(loop with consecutive-yields fixnum = 0)
(loop with consecutive-yields fixnum = 0 do
 (block block))

--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)
          (sym_lit)
          (num_lit)))))
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)
          (sym_lit)
          (num_lit)))
      (loop_clause
        (do_clause
          (list_lit
            (sym_lit)
            (sym_lit)))))))

================================================================================
Loop with keywords (TODO: do should not by type of with!)
================================================================================
(loop :with b :do
   (setq b
         x)
   )
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)
          (kwd_lit
            (kwd_symbol))
          (list_lit
            (sym_lit)
            (sym_lit)
            (sym_lit)))))))

================================================================================
Loop with keywords 2
================================================================================

 (loop
          for id upfrom 0
          with frame = (nth-frame-list index))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (num_lit)))
      (loop_clause
        (with_clause
          (sym_lit)
          (list_lit
            (sym_lit)
            (sym_lit)))))))

================================================================================
with type should be symbol or list (TODO!!!)
================================================================================
(loop :with b :do
   (setq b x))
--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (with_clause
          (sym_lit)
          (kwd_lit
            (kwd_symbol))
          (list_lit
            (sym_lit)
            (sym_lit)
            (sym_lit)))))))

================================================================================
Backslashes in strings
================================================================================
  " \( '\), \( \) "

--------------------------------------------------------------------------------

(source
  (str_lit))

================================================================================
Chars #\(
================================================================================
 (write-char #\( stream)

--------------------------------------------------------------------------------

(source
  (list_lit
    (sym_lit)
    (char_lit)
    (sym_lit)))

================================================================================
Issue #10
================================================================================

(loop for s in symbols                                                    
      maximizing (length (symbol-name s)))

--------------------------------------------------------------------------------

(source
  (list_lit
    (loop_macro
      (loop_clause
        (for_clause
          (sym_lit)
          (for_clause_word)
          (sym_lit)))
      (loop_clause
        (accumulation_clause
          (accumulation_verb)
          (list_lit
            (sym_lit)
            (list_lit
              (sym_lit)
              (sym_lit))))))))
