SICP 习题1.33

来源:互联网 发布:淘宝我的试用在哪里 编辑:程序博客网 时间:2024/06/05 16:43

出现了一个错误,就是

(define (f a ) (a))

改成了

(define (f a) (+ a 0)

才能过

这是因为(a)这样a就是操作数,是一个函数,并不是一个可返回的值。

(define (filtered-accumulate combiner null-value filter-a term a next b)    (cond ((> a b) null-value)          ((filter-a a) (combiner (term a) (filtered-accumulate combiner null-value filter-a term (next a) next b)))          (else (filtered-accumulate combiner null-value filter-a term (next a) next b))))(define (inc n) (+ n 1))(define (add a1 a2) (+ a1 a2))(define (f a) (+ a 0))(define (smallest-divisor n)  (find-divisor n 2))(define (find-divisor n test-divisor)  (cond ((> (square test-divisor) n) n)        ((divides? test-divisor n) test-divisor)        (else (find-divisor n (+ test-divisor 1)))))(define (divides? a b)  (= (remainder b a) 0))(define (prime? n)  (= n (smallest-divisor n)))(define (square x) (* x x)) (define (prime-sum a b)  (filtered-accumulate add 0 prime? f a inc b))(newline)(display (prime-sum 10 15))(define multiply  (lambda (a1 a2) (* a1 a2)))(define (coprime n)  (define (coprime? a)    (= (gcd a n) 1))  (filtered-accumulate    multiply    1    coprime?    f    1    inc    (- n 1)))(newline)(display (coprime 10))
0 0
原创粉丝点击