anchor.diff:  
   ;;;; * Portable lexical environment access
   
  +(defgeneric environment-p (environment)
  +  (:documentation "Returns T if ENVIRONMENT is a lexical
  +  environment object (something suitable for passing to
  +  macroexpand-1 or similar)"))
  +
  +(defgeneric lexical-variables (environment)
  +  (:documentation "Return the names of all the local variables
  +  in ENVIRONMENT. Does not return neither symbol-macrolets nor
  +  ignared variables."))
  +
  +(defgeneric lexical-functions (environment)
  +  (:documentation "Returns the names of all the local functions
  +  in ENVIRONMENT. Names may be symbols of lists of the form (setf
  +  name)."))
  +
   ;;;; ** OpenMCL
   
   #+openmcl
  -(defun environment-p (environment)
  -  (subtypep (class-of environment) 'ccl::lexical-environment))
  +(defmethod environment-p ((e ccl::lexical-environment))
  +  t)
   
   #+openmcl
  -(defun lexical-variables (environment)
  +(defmethod lexical-variables ((environment ccl::lexical-environment))
     (loop
        for env = environment
             then (ccl::lexenv.parent-env env)
  
positive.code:        collect (car var-spec)))
  
  #+sbcl
  (defun lexical-functions (environment)
    (mapcar #'first (sb-c::lexenv-funs environment)))
  
  ;;;; ** CMUCL
  
  #+cmu
  (defun environment-p (environment)
    (subtypep (class-of environment) (find-class 'c::lexenv)))
  
  #+cmu
  (defun lexical-variables (environment)
    (loop
       for var-spec in (c::lexenv-variables environment)
       ;; variable refs are (NAME . LAMBDA-VAR), we want to void
  
negative.code:        collect (car var-spec)))
  
  #+cmu
  (defmethod lexical-functions ((environment c::lexenv))
    (loop
       for func-spec in (c::lexenv-functions environment)
       ;; flet and labels function look like ((FLET ACTUAL-NAME) . STUFF)
  