(def-scheme-macro and (&rest args) (cond ((null args) 'T) (t `(if ,(car args) (and ,@(cdr args))))))と定義してありました.これだと, (and p q)は,(if p (if q t))と展開されることに なり,
<cl> (comp-show '(and p q)) ARGS 0 GVAR P FJUMP L830 GVAR Q FJUMP L832 GVAR T JUMP L833 L832: GVAR NIL L833: JUMP L831 L830: GVAR NIL L831: RETURN NILとなります.ここで,andのマクロ定義を,
(def-scheme-macro and (&rest args) (cond ((null args) 'T) ((null (cdr args)) (car args)) (t `(if ,(car args) (and ,@(cdr args))))))とすれば,(and p q)は,(if p q nil)と なり,
<cl> (comp-show '(and p q)) ARGS 0 GVAR P FJUMP L878 GVAR Q JUMP L879 L878: GVAR NIL L879: RETURN NILという簡潔なコードになります.
<cl> (comp-show '(if (and p q) x y)) ARGS 0 GVAR P FJUMP L305 GVAR Q JUMP L306 L305: GVAR NIL L306: FJUMP L303 GVAR X JUMP L304 L303: GVAR Y L304: RETURN NIL