初めてのCommonLisp。とりあえずFizzBuzz

初めてCommonLispのプログラムを書きました。使っている処理系はCLISPのバージョン2.41です。
早くもloopの機能詰め込みっぷりに唖然。。。formatの書式もわけわかりません。Schemeのiotaっぽい関数がわからなくて自作しました(loopで書くのが一般的なのかな)。mapじゃなくてmapcarっていうのもはまりました。

; -*- compile-command: "C:/usr/clisp-2.41/clisp.exe a.l" -*-

(defun iota (a m n)
  (if (< m n)
      a
    (iota (cons m a) (- m 1) n)))

(defun fizzbuzz (n)
  (mapcar #'(lambda (i) 
	      (cond ((zerop (mod i 15)) "FizzBuzz")
		    ((zerop (mod i 5)) "Buzz")
		    ((zerop (mod i 3)) "Fizz")
		    (t i)))
	  (iota '() n 1)))

(loop for s in (fizzbuzz 100) do
      (format t "~A~%" s))
; => 1
;    2
;    Fizz
;    4
;    Buzz
;    Fizz
;    ...

参照: http://www.yuasa.kuis.kyoto-u.ac.jp/~hiraisi/format-func.html