<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が使われたマク ロとして定義されていることが分かります.