(loop for x from 1 to 9
      for y = nil then x
      collect (list x y)
)
((1 NIL) (2 2) (3 3) (4 4) (5 5) (6 6) (7 7) (8 8) (9 9))

(loop for x from 1 to 9
      and y = nil then x
      collect (list x y)
)
((1 NIL) (2 1) (3 2) (4 3) (5 4) (6 5) (7 6) (8 7) (9 8))

(with-output-to-string (*standard-output*)
  (loop as i from 1 to 5
        do (print i)
) )
"
1 
2 
3 
4 
5 "

(with-output-to-string (*standard-output*)
  (loop for i from 10 downto 1 by 3
        do (print i)
) )
"
10 
7 
4 
1 "

(with-output-to-string (*standard-output*)
  (loop as i below 5
        do (print i)
) )
"
0 
1 
2 
3 
4 "

(with-output-to-string (*standard-output*)
  (loop for item in '(1 2 3 4 5)
        do (print item)
) )
"
1 
2 
3 
4 
5 "

(with-output-to-string (*standard-output*)
  (loop for item in '(1 2 3 4 5) by #'cddr
        do (print item)
) )
"
1 
3 
5 "

(loop for (item . x) (t . fixnum) in '((A . 1) (B . 2) (C . 3))
      unless (eq item 'B) sum x
)
4

(loop for sublist on '(a b c d)
      collect sublist
)
((A B C D) (B C D) (C D) (D))

(with-output-to-string (*standard-output*)
  (loop for (item) on '(1 2 3)
        do (print item)
) )
"
1 
2 
3 "

(with-output-to-string (*standard-output*)
  (loop for item in '(1 2 3)
        do (print item)
) )
"
1 
2 
3 "

(loop for i below 5
      for j = 10 then i
      collect j
)
(10 1 2 3 4)

(loop for i below 5
      for j = i
      collect j
)
(0 1 2 3 4)

(loop for item = 1 then (+ item 10)
      repeat 5
      collect item
)
(1 11 21 31 41)

(loop for char across (the simple-string "Hello")
      collect char
)
(#\H #\e #\l #\l #\o)

(with-output-to-string (*standard-output*)
  (loop repeat 3
        do (write-line "What I say three times is true")
) )
"What I say three times is true
What I say three times is true
What I say three times is true
"

(with-output-to-string (*standard-output*)
  (loop repeat -15
        do (write-line "What you see is what you expect")
) )
""

#| ;; FOR clauses should come before WHILE clauses
(let ((stack '(a b c d e f)))
  (loop while stack
        for item = (length stack) then (pop stack)
        collect item
) )
(6 A B C D E F)
|#

(loop for i fixnum from 3
      when (oddp i) collect i
      while (< i 5)
)
(3 5)

(loop for i from 0 to 10
      always (< i 11)
)
T

(loop for i from 0 to 10
      never (> i 11)
)
T

(loop for i from 0
      thereis (when (> i 10) i)
)
11

(with-output-to-string (*standard-output*)
  (loop for i from 0 to 10
        always (< i 9)
        finally (print "You won't see this")
) )
""

(with-output-to-string (*standard-output*)
  (loop never t
        finally (print "You won't see this")
) )
""

(with-output-to-string (*standard-output*)
  (loop thereis "Here is my value"
        finally (print "You won't see this")
) )
""

(loop thereis "Here is my value"
      finally (print "You won't see this")
)
"Here is my value"

(with-output-to-string (*standard-output*)
  (loop for i from 1 to 10
        thereis (> i 11)
        finally (print i)
) )
"
11 "

(let (everest chocorua sahara)
  (defstruct mountain  height difficulty (why "because it is there"))
  (setq everest (make-mountain :height '(2.86e-13 parsecs)))
  (setq chocorua (make-mountain :height '(1059180001 microns)))
  (defstruct desert  area (humidity 0))
  (setq sahara (make-desert :area '(212480000 square furlongs)))
  (loop for x in (list everest sahara chocorua)
        thereis (and (mountain-p x) (mountain-height x))
) )
(2.86e-13 parsecs)

(with-output-to-string (*standard-output*)
  (loop for (month date-list) in '((january (24 28)) (february (17 29 12)))
        do (loop for date in date-list
                 do (case date
                      (29 (when (eq month 'february) (loop-finish)))
                    )
                 do (format t "~:(~A~) ~A~%" month date)
) )        )
"January 24
January 28
February 17
"

(loop for i in '(1 2 3 stop-here 4 5 6)
      when (symbolp i) do (loop-finish)
      count i
)
3

(loop for i in '(1 2 3 stop-here 4 5 6)
      until (symbolp i)
      count i
)
3

(loop for name in '(fred sue alice joe june)
      for kids in '((bob ken) () () (kris sunshine) ())
      collect name
      append kids
)
(FRED BOB KEN SUE ALICE JOE KRIS SUNSHINE JUNE)

(multiple-value-list
  (loop for name in '(fred sue alice joe june)
        as age in '(22 26 19 20 10)
        append (list name age) into name-and-age-list
        count name into name-count
        sum age into total-age
        finally
          (return (values (round total-age name-count) name-and-age-list))
) )
(19 (FRED 22 SUE 26 ALICE 19 JOE 20 JUNE 10))

(loop for i in '(bird 3 4 turtle (1 . 4) horse cat)
      when (symbolp i) collect i
)
(BIRD TURTLE HORSE CAT)

(loop for i from 1 to 10
      if (oddp i) collect i
)
(1 3 5 7 9)

(with-output-to-string (*standard-output*)
  (loop for i in '(a b c d) by #'cddr
        collect i into my-list
        finally (print my-list)
) )
"
(A C) "

(loop for x in '((a) (b) ((c)))
      append x
)
(A B (C))

(loop for i upfrom 0
      as x in '(a b (c))
      nconc (if (evenp i) (list x) '())
)
(A (C))

(loop for i in '(a b nil c nil d e)
      count i
)
5

(loop for i fixnum in '(1 2 3 4 5)
      sum i
)
15

(let ((series '(1.2 4.3 5.7)))
  (loop for v in series
        sum (* 2.0 v)
) )
22.4

(loop for i in '(2 1 5 3 4)
      maximize i
)
5

(loop for i in '(2 1 5 3 4)
      minimize i
)
1

(let ((series '(1.2 4.3 5.7)))
  (loop for v in series
        maximize (round v) fixnum
) )
6

(let ((series '(1.2 4.3 5.7)))
  (loop for v in series
        minimize (round v) into result fixnum
        finally (return result)
) )
1

(loop with a = 1
      with b = (+ a 2)
      with c = (+ b 3)
      with d = (+ c 4)
      return (list a b c d)
)
(1 3 6 10)

(loop with a = 1
       and b = 2
       and c = 3
       and d = 4
      return (list a b c d)
)
(1 2 3 4)

(let ((a 5) (b 10) (c 1729))
  (loop with a = 1
         and b = (+ a 2)
         and c = (+ b 3)
         and d = (+ c 4)
        return (list a b c d)
) )
(1 7 13 1733)

(loop with (a b c) (float integer float)
      return (format nil "~A ~A ~A" a b c)
)
"0.0 0 0.0"

(loop with (a b c) float
      return (format nil "~A ~A ~A" a b c)
)
"0.0 0.0 0.0"

(let ((numbers-list '(3 2 4 6 1 7 8)) (results nil))
  (cons
    (with-output-to-string (*standard-output*)
      (loop for i in numbers-list
            when (oddp i)
              do (print i)
              and collect i into odd-numbers
              and do (terpri)
              else
              collect i into even-numbers
            finally (setq results (list odd-numbers even-numbers))
    ) )
    results
) )
("
3 

1 

7 
"
(3 1 7) (2 4 6 8))

(loop for i in '(1 2 3 4 5 6)
      when (and (> i 3) i)
        collect it
)
(4 5 6)

(loop for i in '(1 2 3 4 5 6)
      when (and (> i 3) i)
        return it
)
4

(loop for i in '(1 2 3 4 5 6)
      thereis (and (> i 3) i)
)
4

(with-output-to-string (*standard-output*)
  (loop for x from 0 to 3
        do (print x)
        if (zerop (mod x 2))
          do (write-string " a")
          and
          if (zerop (floor x 2))
            do (write-string " b")
            and
            do (write-string " c")
) )
"
0  a b c
1 
2  a
3 "

(with-output-to-string (*standard-output*)
  (loop for x from 0 to 3
        do (print x)
        if (zerop (mod x 2))
          do (write-string " a")
          and
          if (zerop (floor x 2))
            do (write-string " b")
            end
          and
          do (write-string " c")
) )
"
0  a b c
1 
2  a c
3 "

(with-output-to-string (*standard-output*)
  (loop for i from 1 to 5
        do (print i)
) )
"
1 
2 
3 
4 
5 "

(with-output-to-string (*standard-output*)
  (loop for i from 1 to 4
        do (print i)
           (print (* i i))
) )
"
1 
1 
2 
4 
3 
9 
4 
16 "

(loop for item in '(1 2 3 a 4 5)
      when (not (numberp item))
        return (format nil "non-numeric value: ~S" item)
)
"non-numeric value: A"

(loop for item in '(1 2 3 a 4 5)
      when (not (numberp item))
        do (return (format nil "non-numeric value: ~S" item))
)
"non-numeric value: A"

(loop for numlist in '((1 2 4.0) (5 6 8.3) (8 9 10.4))
      for a integer = (first numlist)
      for b integer = (second numlist)
      for c float = (third numlist)
      collect (list c b a)
)
((4.0 2 1) (8.3 6 5) (10.4 9 8))

(loop for numlist in '((1 2 4.0) (5 6 8.3) (8 9 10.4))
      for a integer = (first numlist)
      and for b integer = (second numlist)
      and for c float = (third numlist)
      collect (list c b a)
)
((4.0 2 1) (8.3 6 5) (10.4 9 8))

(loop for numlist in '((1 2 4.0) (5 6 8.3) (8 9 10.4))
      for a integer = (first numlist)
      and b integer = (second numlist)
      and c float = (third numlist)
      collect (list c b a)
)
((4.0 2 1) (8.3 6 5) (10.4 9 8))

(loop for (a b c) (integer integer float) in '((1 2 4.0) (5 6 8.3) (8 9 10.4))
      collect (list c b a)
)
((4.0 2 1) (8.3 6 5) (10.4 9 8))

(loop for (a b c) float in '((1.0 2.0 4.0) (5.0 6.0 8.3) (8.0 9.0 10.4))
      collect (list c b a)
)
((4.0 2.0 1.0) (8.3 6.0 5.0) (10.4 9.0 8.0))

(loop with (a b) float = '(1.0 2.0)
      and (c d) integer = '(3 4)
      and (e f)
      return (list a b c d e f)
)
(1.0 2.0 3 4 NIL NIL)

(loop for (a nil b) = '(1 2 3)
      do (return (list a b))
)
(1 3)

(loop for (x . y) = '(1 . 2)
      do (return y)
)
2

(loop for ((a . b) (c . d)) of-type ((float . float) (integer . integer))
                            in '(((1.2 . 2.4) (3 . 4)) ((3.4 . 4.6) (5 . 6)))
      collect (list a b c d)
)
((1.2 2.4 3 4) (3.4 4.6 5 6))

(loop for buffer in '("\"Hello\"" "\"unterminated" "nothing")
      collect
        (loop initially (unless (char= (char buffer 0) #\") (loop-finish))
              for i fixnum from 1 below (length buffer)
              when (char= (char buffer i) #\")
                return i
)       )
(6 NIL NIL)

(let (result)
  (list
    (with-output-to-string (*standard-output*)
      (setq result
        (loop for i from 1 to 10
              when (> i 5)
                collect i
              finally (print i)
    ) ) )
    result
) )
("
11 " (6 7 8 9 10))

(multiple-value-list
  (loop for i from 1 to 10
        when (> i 5)
          collect i into number-list
          and count i into number-count
        finally (return (values number-count number-list))
) )
(5 (6 7 8 9 10))

(let (result)
  (list
    (with-output-to-string (*standard-output*)
      (setq result
        (loop named max
              for i from 1 to 10
              do (print i)
              do (return-from max 'done)
    ) ) )
    result
) )
("
1 " DONE)

(loop for i = 0 for j to 2 collect j)
(0 1 2)

(loop for i in '(1 2) for j = i for k = j collect (list i j k))
((1 1 1) (2 2 2))

(loop for idx upfrom 0 below 5 for char = (aref "Error" idx) collect char)
(#\E #\r #\r #\o #\r)

(let ((hash-table (make-hash-table)))
  (setf (gethash 1 hash-table) 100)
  (setf (gethash 2 hash-table) 200)
  (sort
   (loop for key being each hash-key in hash-table using (hash-value val)
         for key+1 = (1+ key)
         collect (list key key+1 val))
   #'<
   :key #'car))
((1 2 100) (2 3 200))

(loop for i across #(1 2 3 4) for j = (1+ i) collect (list i j))
((1 2) (2 3) (3 4) (4 5))

(loop for i in '() for j = (1+ i) collect j)
nil

(loop for i across #() for j = (1+ i) collect j)
nil

(loop for x = t for y IN '(A B C) for z = t collect y)
(A B C)

(loop for x = t for y across #(A B C) for z = t collect y)
(A B C)

(loop for x = t for y in () for z = t collect y)
nil

(loop for x = t for y across #() for z = t collect y)
nil

(let ((hash-table (make-hash-table)))
  (setf (gethash 1 hash-table) 100)
  (setf (gethash 2 hash-table) 200)
  (sort
   (loop for x = t
         for key being each hash-key in hash-table using (hash-value val)
         for key+1 = (1+ key)
         for z = t
         collect (list key key+1 val))
   #'<
   :key #'car))
((1 2 100) (2 3 200))

(loop for i from 1 to 0 collect i)
nil

(let ((hash-table (make-hash-table)))
  (setf (gethash 1 hash-table) 100)
  (setf (gethash 2 hash-table) 200)
  (sort
   (loop for val being each hash-value in hash-table
         collect val)
   #'<))
(100 200)

(let ((hash-table (make-hash-table)))
  (setf (gethash 1 hash-table) 100)
  (setf (gethash 2 hash-table) 200)
  (sort
   (loop for val being each hash-value in hash-table for deriv-val = (/ 1 val) 
         collect deriv-val)
   #'<))
(1/200 1/100)

(let ((hash-table (make-hash-table)))
  (setq i 123456789)
  (setf (gethash 1 hash-table) 100)
  (setf (gethash 2 hash-table) 200)
  (loop for i across #(1 2 3 4 5 6) collect i)
  (loop for i in '(1 2 3 4 5 6) collect i)
  (loop for i being each hash-key of hash-table collect i)
  (loop for i being each present-symbol of *package* collect i)
  i)
123456789

(loop for x on '(3 4 5)
      for y = (car x)
      for z in '(a b c)
      collect z)
(a b c)

(loop for x across #(3 4 5)
      for y = (1+ x)
      for z across #(a b c)
      collect (list x y z))
((3 4 a) (4 5 b) (5 6 c))

(loop for x across #()
      for y = x
      for z across #(a b c)
      collect (list x y z))
nil

(loop for x across #(1 2 3)
      for y = x
      for z across #()
      collect (list x y z))
nil

(loop for x across #(1 2 3)
      for y = (1+ x)
      for z across #(a b)
      collect (list x y z))
((1 2 a) (2 3 b))

(loop for x across #(1 2)
      for y = (1+ x)
      for z across #(a b c)
      collect (list x y z))
((1 2 a) (2 3 b))

(let ((package (make-package "LOOP-TEST")))
  (intern "blah" package)
  (let ((blah2 (intern "blah2" package)))
    (export blah2 package))
  (list
   (sort 
    (loop for sym being each present-symbol of package 
          for sym-name = (symbol-name sym)
          collect sym-name)
    #'string<)
   (sort 
    (loop for sym being each external-symbol of package 
          for sym-name = (symbol-name sym)
          collect sym-name)
    #'string<)))
(("blah" "blah2") ("blah2"))

(let ((ht (make-hash-table)))
  (loop for key being each hash-key of ht
        for value = (gethash key ht)
        collect (list key value)))
nil