anchor.diff:          while (<= 0 index) do
           (funcall function index value)))
   
  +;;; Note that this is the only way to get back the input vectors from
  +;;; PROBLEM because pointers to the sparse vectors that make up the
  +;;; problem are not wrapped (see wrapper mechanism) and consequently
  +;;; they cannot be handed out to client code.
   (defun map-problem-input (function problem i)
     "Map FUNCTION over the indices and values of the Ith input vector of
   PROBLEM."
  
positive.code:   ((index :initarg :index :reader index)
     (max-index :initarg :max-index :reader max-index))
    (:report (lambda (condition stream)
               (format stream "Invalid sparse index ~S is not greater than ~S"
                       (index condition) (max-index condition)))))
  
  (defmethod translate-to-foreign ((vector vector) (name (eql 'sparse-vector)))
  
negative.code:                        (degree 3) (gamma 0) (coef0 0) (nu 0.5)
                         (cache-size-MiB 100) (c 1) (eps 0.001) (p 0.1)
                         (shrinking t) probability)
    "Make an object that describes how to TRAIN. Note that the command
  line svm-train defaults to GAMMA=1/maxindex but in this function it
  defaults to 0. SVM-TYPE is one of :C-SVC, :NU-SVC, :ONE-CLASS,
  :EPSILON-SVR, :NU-SVR. KERNEL-TYPE is one of :LINEAR, :POLY, :RBF,
  :SIGMOID, :PRECOMPUTED. See the LIBSVM documentation for the meaning
  of the arguments."
    (let* ((parameter (foreign-alloc 'parameter-struct)))
      (macrolet ((set-slots (&rest names)
                   (list* 'progn
  