; 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)
OyBsaW5lYXIgcmVncmVzc2lvbgoKKGRlZmluZSAocmVncmVzc2lvbiB4cyB5cykKICAobGV0IGxvb3AgKCh4cyB4cykgKHlzIHlzKSAobiAwKQogICAgICAgICAgICAgKHggMCkgKHkgMCkgKHh5IDApICh4eCAwKSkKICAgIChpZiAocGFpcj8geHMpCiAgICAgICAgKGxvb3AgKGNkciB4cykgKGNkciB5cykgKCsgbiAxKQogICAgICAgICAgICAgICgrIHggKGNhciB4cykpICgrIHkgKGNhciB5cykpCiAgICAgICAgICAgICAgKCsgeHkgKCogKGNhciB4cykgKGNhciB5cykpKQogICAgICAgICAgICAgICgrIHh4ICgqIChjYXIgeHMpIChjYXIgeHMpKSkpCiAgICAgICAgKGxldCAoKG0gKC8gKC0gKCogbiB4eSkgKCogeCB5KSkKICAgICAgICAgICAgICAgICAgICAoLSAoKiBuIHh4KSAoKiB4IHgpKSkpKQogICAgICAgICAgKGxpc3QgbSAoLyAoLSB5ICgqIG0geCkpIG4pKSkpKSkKCihkaXNwbGF5IChyZWdyZXNzaW9uICcoNjAgNjEgNjIgNjMgNjUpICcoMy4xIDMuNiAzLjggNCA0LjEpKSkgKG5ld2xpbmUpCgooZGlzcGxheSAoLSAoKiAwLjE4NzggNjQpIDcuOTYzNSkpIChuZXdsaW5lKQ==