码迷,mamicode.com
首页 > 其他好文 > 详细

SICP 1.31 1.32 1.33

时间:2014-08-23 15:28:31      阅读:199      评论:0      收藏:0      [点我收藏+]

标签: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))


SICP 1.31 1.32 1.33

标签:des   ar   div   sp   ad   on   ef   python   res   

原文地址:http://my.oschina.net/u/1445655/blog/305852

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!