sigma¶
; Arriving at higher abstraction notation "Sigma" ; (1) Compute sum from a to b ; a + (a + 1) + ... + (b - 1) + b (define (sum-integers a b) (if (> a b) 0 (+ a (sum-integers (+ a 1) b)))) (sum-integers 1 10) ;Value: 55 ; (2) Sum of cubes of integer from a to b ; a^3 + (a+1)^3 + ... + (b-1)^3 + b^3 (define (cube x) (* x x x)) (define (sum-cubes a b) (if (> a b) 0 (+ (cube a) (sum-cubes (+ a 1) b)))) (sum-cubes 2 4) ;Value: 99 ; (3) Sum of the following series (Pi-sum) ; (1/ (1 * 3)) + (1 / (5 * 7)) + (1 / (9 * 11)) + ... = π/8 (define (pi-sum a b) (if (> a b) 0 (+ (/ 1.0 (* a (+ a 2))) (pi-sum (+ a 4) b)))) (* 8 (pi-sum 1 1000)) ;Value: 3.139592655589783 ; Abstracting the common pattern, (define (sigma term a next b) (if (> a b) 0 (+ (term a) (sigma term (next a) next b)))) ; Problem (2) can be written as, (define (inc n) (+ n 1)) (define (sum-cubes a b) (sigma cube a inc b)) (sum-cubes 2 4) ;Value: 99 ; Problem (3) can be written as, (define (pi-sum a b) (define (pi-term x) (/ 1.0 (* x (+ x 2)))) (define (pi-next x) (+ x 4)) (sigma pi-term a pi-next b)) (* 8 (pi-sum 1 1000)) ;Value: 3.139592655589783