Next: 15.3 Progとその定義
Up: 15 制御文マクロ
Previous: 15.1 条件式 cond
while, dolist, dotimes, do などがあります.
<cl> (dolist (x '(a b c)) (print x))
A
B
C
NIL
<cl> (dotimes (x 3) (print x))
0
1
2
NIL
<cl> (do ((x 1 (+ x 2))) ((> x 3) x) (print x))
1
3
5
<cl> x
Error: Attempt to take the value of the unbound symbol X
[1] <cl> :reset
繰り返しの内部で使われる変数(ここでは x)は局所変数で,
この内部だけで値を持つものです.外側のxとは別のものです.
dotimesを定義してみると,
(defmacro dotimes ((var form
&optional (result nil))
&body)
(let ((limit (gensym)))
`(do ((,var 0 (1+ ,var))
(,limit ,form))
((>= ,var ,limit) result)
,@body)))
とできます.ここで,dotimesが
(dotimes (変数 整数式 結果) 本体)
という形で,結果があってもなくてもよいために,
((変数 整数式 &optional) . 本体)
という形で引数宣言がなされています.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日