(defun square (i) (* i i)) (defun nl () (princ "\n")) ;; looping structures (define counter 0) (while (< counter 5) (print (list counter (square counter))) (setq counter (+ counter 1))) (nl) (do ((i 0 (+ i 1))) ; bindings: (var init step) ((= i 10)) ; until (princ i)) (nl) (let sum ((rest '(1 2 3 4 5)) (total 0)) (if (null rest) total (sum (cdr rest) (+ total (car rest)))) (princ total) (princ " ")) (nl) (mapcar (lambda (x) (print (square x))) '(1 2 3 4 5)) (nl) ;; conditional structures (if (= 3 (max 1 2 3)) (princ "true-forms\n") (princ "false-forms\n")) (when t (princ "true-forms\n")) (unless nil (princ "false-forms\n")) (cond ((< counter 5) (princ "counter < 5\n")) ((>= counter 5) (princ "counter >= 5\n")) (t (error "counter has gone wild"))) (case counter ((1 2 3 4 5) (princ "counter in 1..5\n")) ((6 7) (princ "counter in 6..7\n")) (t (princ "counter is something else\n"))) (princ (or nil 1 nil "or")) (princ (and 1 2 nil "and")) (princ (not t)) (princ (not nil)) (princ "\n")