Lisp で FizzBuzz
あえて Common Lisp の do マクロを避けて、自分で defmacro してみる。ちょっとしたリハビリ。つうかまだひっ ぱるのか。
Emacs Lisp で書いたけど、Common Lisp でもそのまま動くだろう。たぶん。
(defmacro from-to (var from to &rest body) `(let ((,var ,from)) (while (<= ,var ,to) (progn ,@body (setq ,var (1+ ,var)))))) (defun fizzbuzz () (from-to i 1 100 (let ((mul3p (zerop (mod i 3))) (mul5p (zerop (mod i 5)))) (cond ((and mul3p mul5p) (print "FizzBuzz")) (mul3p (print "Fizz")) (mul5p (print "Buzz")) (t (print i))))))