マクロ

展開形にsetfが出てくる場合には注意。
複数回評価したら問題が出る。
define-modify-macroでかけたらかく

; SLIME 2007-05-24
CL-USER> (defmacro incfw(x &optional (y 1))
       `(setf ,x (+ ,x ,y)))
INCFW
CL-USER> (setf lst nil)
NIL
CL-USER> (incf (car (push 1 lst)))
2
CL-USER> lst
(2)
CL-USER> (setf lst nil)
NIL
CL-USER> (incfw (car (push 1 lst)))
2
CL-USER> lst
(1 2)
CL-USER> (macroexpand-1 '(incfw (car (push 1 lst))))
(SETF (CAR (PUSH 1 LST)) (+ (CAR (PUSH 1 LST)) 1))
T
;;(push 1 lst)が二回呼ばれるからまずい