anchor.diff:      (nreverse list)))
   
   (defun group (source n)
  +  (declare (type list source) (type integer n))
     (if (zerop n) (error "zero length"))
     (labels ((rec (source acc)
   		(let ((rest (nthcdr n source)))
  
positive.code: 
  (defun clean-option (direct-slot option)
    "Returns two values, the first being the `direct-slot' with the `option' and its value stripped and the second being a list consisting of the name of the slot and the found prop and value. If such a prop isn't found then the second element is NIL."
    (let* ((grouped (group (cdr direct-slot) 2))
           (found-prop (find option grouped :key #'car :test #'eq))
           (final (append (list (first direct-slot))
  
negative.code:   ;; Preparation
    (multiple-value-bind (cleaned-direct-slots collected-properties)
        (clean-options direct-slots :json-prop :json-decoder)
  
      ;; Was a slot provided by its symbol alone? If so, wrap it up in a list
      (setf cleaned-direct-slots
            (loop for s in cleaned-direct-slots
               collect (if (listp s) s (list s))))
      
      ;; Automatically store all unknown json-properties + values in this slot
      ;; Note: This is used by define-json-decoder
      (unless  (find 'rest cleaned-direct-slots
                     :test (lambda (term slot)
                             (find term slot)))
        (push `(rest :documentation "Unknown flags put here" :initarg :rest :accessor ,(intern (string-upcase "rest-of") *package*)) cleaned-direct-slots))
      ;; Append :initarg to all slots in case it is not present yet
      (setf cleaned-direct-slots
            (mapcar
             (lambda (slot)
               (if (and (listp slot) (find :initarg slot))
                   slot
                   (append slot
                           (list :initarg (intern (symbol-name (car slot)) 'keyword)))))
  