anchor.diff:        (enqueue form (%struct-single-get name (%struct-field-name (car i)) index)))))
   
   (defun %struct-p (name)
  -  (let ((sym (%struct-p-symbol name)))
  +  (with (sym (%struct-p-symbol name))
       `(defun ,sym (arr)
  -        (and (arrayp arr) (eq (elt arr 0) ,name)))))
  +       (and (arrayp arr) (eq (elt arr 0) ,name)))))
   
   (defun %struct-sort-fields (fields-and-options)
     "Split list into fields and options."
  
positive.code:   `(&key ,@fields))
  
  (defun %struct-make-init (fields)
    (let ((form (make-queue)))
      (do ((i fields (cdr i))
  	 (idx 1 (1+ idx)))
          ((endp i) (queue-list form))
        (if (consp (car i))
          (enqueue form `(setf (elt a ,idx) ,(caar i)))
          (enqueue form `(setf (elt a ,idx) ,(car i)))))))
  
  (defun %struct-make (name fields options)
    (let ((sym (%struct-make-symbol name options))
          (user-init (%struct-make-init fields))
  	(type-init `((setf (elt a 0) ',name))))
      `(defun ,sym ,(%struct-make-args fields)
         (let ((a (make-array ,(1+ (length fields)))))
           ,@(if user-init
  	     (nconc type-init user-init)
  	     type-init)
  
negative.code: 
  (defun %struct-name (obj)
    (if (not (arrayp obj))
        (%error "object is not a struct")
        (elt 0 obj)))
  
  (defun %struct-fields (name)
    (with-queue form
  