anchor.diff:  				    (aref values j)))))
       out))
   
  -;;; Untested.
  +;;; The new sparse vector will have index array the intersection of two
  +;;; original arrays, so the implementation maybe easier.
   (defun sparse-inner-product (svec1 svec2)
  -  "Inner product of two sparse vectors."
  +  "Inner product function of two sparse vectors."
     (declare (type sparse-vector svec1 svec2))
     (assert (= (sparse-vector-len svec1)
   	     (sparse-vector-len svec2))
  
positive.code: 	       (aref out-index i) (aref index i)))
      out))
  
  ;;; SOME CODE UNREACHABLE.
  (defun sparse-vector-+-2 (svec1 svec2)
    "Helper function of general sparse vector addition."
    (declare (type sparse-vector svec1 svec2))
  
negative.code: 	  "Size mismatch, two vectors of length ~D and ~D."
  	  (sparse-vector-len svec1)
  	  (sparse-vector-len svec2))
    (let* ((values1 (sparse-vector-values svec1))
  	 (values2 (sparse-vector-values svec2))
  	 (index1 (1d-array-to-list (sparse-vector-index svec1)))
  	 (index2 (1d-array-to-list (sparse-vector-index svec2)))
  	 (index (sort (intersection index1 index2) #'<))
  	 (out 0))
      (flet ((find-nth (item lst)
  	     (loop for i from 0 to (1- (length lst)) do
  		  (if (= (nth i lst) item)
  		      (return-from find-nth i)))
  	     nil))
        ;; All entries in INDEX will be in INDEX1 and INDEX2, get their
        ;; corresponding index, and their corresponding value can be found
        ;; easily, accumulate their products together then...
        (loop for i from 0 to (1- (length index)) do
  	   (let ((i1 (find-nth (nth i index) index1))
  		 (i2 (find-nth (nth i index) index2)))
  	     (incf out (* (aref values1 i1) (aref values2 i2))))))
      out))
  