(defun extract-variable (decl var-form var-name) (let ((*package* (symbol-package (second decl)))) (labels ((walker (form) (cond ((equal form var-form) var-name) ((listp form) (mapcar #'walker form)) (t form)))) (if (eq 'cl:let (car (fourth decl))) `(defun ,(second decl) ,(third decl) (let ((,var-name ,var-form) ,@(second (fourth decl))) ,(walker (third (fourth decl))))) `(defun ,(second decl) ,(third decl) (let ((,var-name ,var-form)) ,@(walker (cdddr decl))))))))