(define (scalar op array number) (map (lambda (x) (op x number) ) array)) (define (sum array) (apply + array)) (define (mean x) (/ (sum x) (length x))) ;(define (sqrt x) (expt x 0.5)) (define (pearson x y) ( (lambda (x y) ( if (not (= (length x) (length y))) (error "x and y have incompatible dimensions") ( let* ( (n (length x)) (mx (mean x)) (my (mean y)) (xm (scalar - x mx)) (ym (scalar - y my)) (sx (sqrt (/ (sum (map * xm xm)) (- n 1)))) (sy (sqrt (/ (sum (map * ym ym)) (- n 1)))) (sxy (/ (sum (map * xm ym)) (- n 1))) ) (/ sxy (* sx sy)) ) ) ) x y ))