; 6.2.scm
; 2024-10-12
; $Id: 6.2.scm 1.1 2024/11/02 12:38:38 s Exp $

; e_x   : E(x)
; var_x : var(x)

(use gauche.array)

; procedure
(define sum (lambda (x) (fold + 0 x)))

; input
(define n 6)
(define x (tabulate-array (shape 0 n 0 n)(^(i j) (* (+ i 1) (+ j 1)))))

; calculating
(define m     (array-size x))
(define sum_x (sum (array->list x)))
(define e_x   (exact->inexact (/ sum_x m)))
(define sum_v (sum (map (lambda (x) (expt (- x e_x) 2)) (array->list x))))
(define var_x (/ sum_v m))

; output
(print '6.2.scm)
(format #t "~6@a ~6@a ~6@a ~10@a\n" 
           'x  "E(x)" "x-E(x)" "(x-E(x))^2")
(print '-------------------------------)
(for-each (lambda (x1) 
    (format #t "~6d ~6,2f ~6,2f ~10,2f\n"
                 x1 e_x (- x1 e_x) (expt (- x1 e_x) 2)))
    (array->list x)
)
(print '-------------------------------)
(format #t "~10a ~6d\n"   "m= "     m)
(format #t "~10a ~6,2f\n" "E(x)="   e_x)
(format #t "~10a ~6,2f\n" "var(x)=" var_x)
; end