range

Common LispにはPython等に見られるrange関数がないみたい(?)ですね。

(defun range (end &optional (start 0) &key (step 1))
  (cond ((not (plusp (- end start))) nil)
        (t
         (let (acc)
           (do ((i start (+ i step)))
               ((>= i end) (nreverse acc))
             (push i acc) )))))


>(range 10)
(0 1 2 3 4 5 6 7 8 9)

>(range 11 1)
(1 2 3 4 5 6 7 8 9 10)

>(range 21 0 :step 2)
(0 2 4 6 8 10 12 14 16 18 20)

>(range -10 -20)
(-20 -19 -18 -17 -16 -15 -14 -13 -12 -11)

破壊的操作とループを積極的に使ってるので速度もまぁまぁなんじゃないかな。
Lispのコード貼り付けるとインデント崩れる・・・。

(let* ((lst (range 101 1))
       (gen #'(lambda (v) #'(lambda (x) (= 0 (mod x v)))))
       (f3 (funcall gen 3))
       (f5 (funcall gen 5))
       (buzz #'(lambda (x) (if x (concatenate 'string x "Buzz") "Buzz"))) )
  (mapcan #'(lambda (x)
              (let (v)
                (if (funcall f3 x) (setf v "Fizz"))
                (if (funcall f5 x) (setf v (funcall buzz v)))
                (if v (setf v (intern v)) (setf v x))
                (list v) ))
          lst ))