id:eel3:20090307:1236401934 のCommon Lisp版の自作iotaにはSchemeっぽさが残っているというか、Common Lispっぽさが足りていないと思う。 Schemeは末尾再帰の最適化が仕様に含まれているけどCommon Lispでは含まれていない、というのは有名な話で、だから末尾再帰を最適化してループに展開して欲しい場合は処理系依存の機能に頼ることになる。 しかしそんな軟弱な態度じゃマズイだろう、ということでCommon Lispではループ用のマクロが多用される*1。 ということで、ループマクロの勉強を兼ねて書き直してみた。 まずはdotimes。iotaの第1引数はcountという名前だから、やはり繰り返す回数が大切なんだろうと考えて、dotimes。 ; dotimes 版その01 ; let が余分な感じに見える (defun iota (co