マクロに現れるprogn
気になるけど、気にするだけ無駄なんだよね。ということの確認。
(defmacro nprogn (num &rest body) (nprogn-f (1- num) `(progn ,@body))) (defun nprogn-f (num body) (if (plusp num) (list 'let nil (nprogn-f (1- num) body)) body)) (macroexpand '(nprogn 5 nil)) | (progn (progn (progn (progn (progn nil))))) (defun f () (nprogn 1000 nil)) ;注)大きくしすぎるとスタックオーバーフローを起こす。 (time (f)) Real time: 0.0 sec. Run time: 0.0 sec. Space: 0 Bytes ;CLISPの場合