anchor.diff:    ;; meta parameters
     C alpha epsilon beta1 beta2
     ;; internal parameters
  -  g m v m0 v0 beta1^t beta2^t tmp-vec)
  +  g m v m0 v0 beta1^t beta2^t tmp-vec tmp-float)
   
   (defun %print-lr+adam (obj stream)
     (format stream "#S(LR+ADAM~%~T:INPUT-DIMENSION ~A~%~T:WEIGHT ~A ...~%~T:BIAS ~A)"
  
positive.code:    :v0 0d0
     :beta1^t beta1
     :beta2^t beta2
     :tmp-vec (make-dvec input-dimension 0d0)))
  
  (define-learner lr+adam (learner input training-label)
    (let ((weight (lr+adam-weight learner)) (bias (lr+adam-bias learner))
          (C (lr+adam-C learner)) (tmp-vec (lr+adam-tmp-vec learner))
          (g (lr+adam-g learner)) (g0 0d0)
          (m (lr+adam-m learner)) (m0 (lr+adam-m0 learner))
          (v (lr+adam-v learner)) (v0 (lr+adam-v0 learner))
  
negative.code: (defstruct (lr+sgd (:constructor %make-lr+sgd))
    input-dimension weight bias
    ;; meta parameters
    C eta g tmp-vec tmp-float)
  
  (defun make-lr+sgd (input-dimension C eta)
    (%make-lr+sgd
  