`
zhangle
  • 浏览: 25967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

sicp 习题 1.42 ~ 1.46

    博客分类:
  • SICP
阅读更多
1.42
(define (my-compose f g)
  (lambda (x)
    (f (g x))))

(define (inc x)
  (+ x 1))

(define (square x)
  (* x x))

((my-compose square inc) 6)


1.43
(define (my-compose f g)
  (lambda (x)
    (f (g x))))

(define (inc x)
  (+ x 1))

(define (square x)
  (* x x))

((my-compose square inc) 6)

(define (repeated f n)
  (if (= n 1) 
      f 
      (compose f (repeated f (- n 1)))))

(define (my-repeated f n)
  (lambda (x)
    (if (= n 1)
        (f x)
        ((my-compose f (my-repeated f (- n 1))) x))))

((repeated square 3) 5)

((my-repeated square 3) 5)


1.44
(define (square x)
  (* x x))

(define (composed f g)
  (lambda (x)
    (f (g x))))

(define (repeated f n)
  (if (= n 1) 
      f 
      (composed f (repeated f (- n 1)))))

(define dx 0.00001)

(define (smooth f)
  (lambda (x)
    (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3)))

(define (n-smooth n f)
  ((repeated smooth n) f))

((smooth square) 2)
((smooth (smooth square)) 2)
((smooth (smooth (smooth square))) 2)

((n-smooth 3 square) 2)


1.45
(define tolerance 0.00001)

(define dx 0.00001)

(define (square x)
  (* x x))

(define (average a b)
  (/ (+ a b) 2))

(define (composed f g)
  (lambda (x)
    (f (g x))))

(define (repeated f n)
  (if (= n 1)
      f 
      (composed f (repeated f (- n 1)))))

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (newline)
      (display next)
      (if (close-enough? guess next)
          next
          (try next))
      ))
    (try first-guess))

(define (power x n)
  (if (= n 1)
      x
      (* x (power x (- n 1)))))

(define (times i)
  (if (< i 2)
      0
      (+ 1 (times (/ i 2)))))

(define (average-damp f)
  (lambda (x)
    (average x (f x))))

(define (n-average-damp n f)
  ((repeated average-damp n) f))

(define (my-sqrt x)
  (fixed-point (average-damp (lambda (y) (/ x y))) 1.0))

(define (my-sqrt-n x n)
  (fixed-point (n-average-damp (- (times n) 1) (average-damp (lambda (y) (/ x (power y (- n 1)))))) 1.0))

;;(my-sqrt-n 64 3)
(my-sqrt-n 64 7)
(my-sqrt-n 64 8)
(my-sqrt-n 64 15)
(my-sqrt-n 64 31)
(my-sqrt-n 64 63)


1.46
(define (iterative-improve good-enough? improve)
  (define (try-it x)
    (if (good-enough? x)
        x
        (try-it (improve x))))
  (lambda (x)
    (try-it x)))

(define (sqrt x)
  (define (good-enough? guess)
    (< (abs (- (square guess) x)) 0.001))
  (define (improve guess)
    (average guess (/ x guess)))
  ((iterative-improve good-enough? improve) 1.0))

(sqrt 2)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics