(defpackage :vector-stuff (:use :cl) (:export #:dec)) (in-package :vector-stuff) (defmacro dec ((&rest vectors) &body body) `(let* ,(loop for vector in vectors for n from 1 for forced = (gensym "FORCED-VECTOR") for x-name = (alexandria:format-symbol *package* "X~d" n) for y-name = (alexandria:format-symbol *package* "Y~d" n) appending `((,forced ,vector) (,x-name (aref ,forced 0)) (,y-name (aref ,forced 1)))) ,@body)) (in-package :cl-user) (let ((v1 (vector 1 2)) (v2 (vector 3 4))) (vector-stuff:dec (v1 v2) (vector (+ x1 x2) (+ y1 y2))))