マクロ
展開形に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)が二回呼ばれるからまずい