next up previous
Next: 16 集合 Up: 15 制御文マクロ Previous: 15.2 繰り返し文

15.3 Progとその定義

関数を順に評価してゆき,途中に 飛び先ラベルをおいて,go文などを用いて,そのラベルへ飛ぶことによって 繰り返し構造などを定義できる prog式があります. これもマクロで定義されています.
<cl> (prog (x y z)
           (setq x 0)
           loop
           (if (> x 10) (go exit))
           (print x)
           (setq x (1+ x))
           (go loop)
           exit
           (list x))

0
1
2
3
4
5
6
7
8
9
10
NIL
<cl>
この progは実はマクロで,

<cl> (macroexpand 
   '(prog (x y z)
          (setq x 0)
          loop
          (if (> x 10) (go exit))
          (print x)
          (setq x (1+ x))
          (go loop) exit (list x)))

(LET (X Y Z) (DECLARE)
 (BLOCK NIL
       (TAGBODY
         (SETQ X 0)
         LOOP
         (IF (> X 10) (GO EXIT)) 
         (PRINT X)
         (SETQ X (1+ X))
         (GO LOOP)
         EXIT
         (LIST X))))
T
<cl>
となっています.スペシャルフォームの let,block, tagbodyが使われたマク ロとして定義されていることが分かります.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日