标签:des ar div sp ad on ef python res
解:1.31
(define (add-1 x) (+ x 1)) (define (product term a next b) (if (> a b) 1 (* (term a) (product term (next a) next b)))) (define (product-iter term a next b) (define (iter x result) (if (> x b) result (iter (next x) (* result (term x))))) (iter a 1.0)) (define (factorial n) (product identity 1 add-1 n)) (define (pi n) (define (term x) (define t (* x 1.0)) (cond ((even? t) (/ (+ t 2) (+ t 1))) (else (/ (+ t 1) (+ t 2))))) (* 4.0 (product-iter term 1 add-1 n)))
1.32
(define (accumulate combiner null-value term a next b) (if (> a b) null-value (combiner (term a) (accumulate combiner null-value term (next a) next b)))) (define (accumulate-iter combiner null-value term a next b) (define (iter x result) (if (> x b) result (iter (next x) (combiner (term x) result)))) (iter a null-value)) (define (acc-sum term a next b) (accumulate-iter + 0 term a next b)) (define (acc-product term a next b) (accumulate-iter * 1 term a next b))
1.33
(define (filtered-accumulate filter combiner null-value term a next b) (define t (term a)) (define lvar (if (filter t) t null-value)) (if (> a b) null-value (combiner lvar (filtered-accumulate filter combiner null-value term (next a) next b)))) (define (square x) (* x x)) (define (smallest-divisor n) (define (divides? a b) (= (remainder b a) 0)) (define (next divisor) (if (= divisor 2) 3 (+ divisor 2))) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divisor) (else (find-divisor n (next test-divisor))))) (find-divisor n 2)) (define (prime? n) (= n (smallest-divisor n))) (define (sum-prime a b) (filtered-accumulate prime? + 0 identity a add-1 b)) (define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) (define (co-prime-product n) (define (co-prime? i) (= 1 (gcd i n))) (filtered-accumulate co-prime? * 1 identity 2 add-1 n))
标签:des ar div sp ad on ef python res
原文地址:http://my.oschina.net/u/1445655/blog/305852