(defmacro _f43 (op place &rest args) (multiple-value-bind (temps exprs stores set get) (get-setf-expansion place) (let ((op-sym (gensym "OP")) (value-sym (gensym "VALUE")) (list-sym (gensym "LIST"))) `(let* ((,op-sym ,op) ,@(mapcar #'list temps exprs) (,value-sym ,get) (,list-sym (list ,@args)) (,(first stores) (apply ,op-sym ,value-sym ,list-sym))) ,set)))) (defmacro _f34 (op place &rest args) (multiple-value-bind (temps exprs stores set get) (get-setf-expansion place) (let ((op-sym (gensym "OP")) (value-sym (gensym "VALUE")) (list-sym (gensym "LIST"))) `(let* ((,op-sym ,op) ,@(mapcar #'list temps exprs) (,list-sym (list ,@args)) (,value-sym ,get) (,(first stores) (apply ,op-sym ,value-sym ,list-sym))) ,set)))) ;; => 9 (let ((yo (cons 1 2))) (_f43 (progn (incf (car yo)) #'+) (car yo) (incf (car yo)) (incf (car yo)))) ;; => 11 (let ((yo (cons 1 2))) (_f34 (progn (incf (car yo)) #'+) (car yo) (incf (car yo)) (incf (car yo))))