(defmacro destructuring-defun (name destructuring-lambda-list &body body) (let ((gensym (gensym))) `(defun ,name (&rest ,gensym) (destructuring-bind ,destructuring-lambda-list ,gensym ,@body)))) (destructuring-defun foo (bar (baz quux) &key frob) (list bar baz quux frob)) CL-USER> (foo 1 '(2 3) :frob 4) (1 2 3 4)