EXAMPLES OF LOOPS IN LISP
Also Prog1 and Progn
Chapter 7 Winston/Horn Lisp

1. DOTIMES    (dotimes (count-parameter upper-bound result)
                   body...)

(defun do-times-expt (base exp)
   (let ((result 1))
      (dotimes  (count n result)      ;;loop n times
         (setf result (* base result)))))



2.  DOLIST   (dolist  (element list result)
                 body...)

(setf freezing 32 boiling 212)

(defun count-outlyers (list-of-elements)
   (let  ((result 0))
       (dolist (element list-of-elements result)
          (when (or (> element boiling)
                    (< element freezing))
               (setf result (+ result 1))))))


3.  DO  A general loop

(defun do-expt (base exp)
    (do  ((result 1)
          (exponent  exp))
         ((zerop exponent) result)   ;;test to exit loop
       (setf result (* base result))     ;;Body of loop
       (setf exponent (- exponent 1)))))

4.  LOOP    Loop until return

(setf cheers 'cheers '(cheer cheer cheer))

(setf loop-count 0)

(loop
    (when (endp cheers) (return loop-count))
    (setf cheers (rest cheers))
    (setf loop-count (+ loop-count 1)))


5.  PROG1 and PROGN    Grouping statements

(prog1 (setf a 'x)  (setf b 'y) (setf c 'z))
X

(progn  (setf a 'x)  (setf b 'y) (setf c 'z))
Z