anchor.diff:  
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;
  -;;; Find all external in an AST.
  +;;; Find all externals in an AST.
   
   (defun find-externals (ast)
  -  (labels ((traverse (ast in-function-p)
  +  (let ((table (make-hash-table :test #'eq)))
  +    (labels
  +	((traverse (ast in-function-p)
  +	   (unless (gethash ast table)
  +	     (setf (gethash ast table) t)
   	     (typecase ast
   	       (sicl-ast:constant-ast
   		(ensure-object (sicl-ast:value ast) in-function-p))
  
positive.code: 	  (t
  	   (error "unknown object")))))
  	     
  
negative.code: 	     (loop for child in (sicl-ast:children ast)
  		   do (traverse child
  				(or in-function-p
  				    (typep ast 'sicl-ast:function-ast)))))))
        (traverse ast nil))))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  