; linear regression

(define (regression xs ys)
  (let loop ((xs xs) (ys ys) (n 0)
             (x 0) (y 0) (xy 0) (xx 0))
    (if (pair? xs)
        (loop (cdr xs) (cdr ys) (+ n 1)
              (+ x (car xs)) (+ y (car ys))
              (+ xy (* (car xs) (car ys)))
              (+ xx (* (car xs) (car xs))))
        (let ((m (/ (- (* n xy) (* x y))
                    (- (* n xx) (* x x)))))
          (list m (/ (- y (* m x)) n))))))

(display (regression '(60 61 62 63 65) '(3.1 3.6 3.8 4 4.1))) (newline)

(display (- (* 0.1878 64) 7.9635)) (newline)