首页 > 代码库 > SICP 1.34-1.39习题体会

SICP 1.34-1.39习题体会

1.34 代入法, 报错, 2不能作为操作符

1.35 证明比较简单,因为它为方程的根。代码也就是将书本代码重写一遍。

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


1.36 在上面的try下面加打印语句就行了。

测试了下迭代速度, 不用平均大概30多次,用平均10次左右。

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


(define (xx1000 guess)
    (define (funX x)
(/ (log 1000) (log x)))
  (fix-point funX guess))
(define (xx1000-avg guess)
    (define (funX x)
(/ (log 1000) (log x)))
    (define (avg-funX x)
(/ (+ x (funX x)) 2))
  (fix-point avg-funX guess))


1.37  1.38 1.39是一个系列的题目, 比较简单。

1.37

(define (cont-frac n d k)
    (define (cont-frac-r index)
(if (= index k)
   0
   (/ (n index)
      (+ (d index)
 (cont-frac-r (+ index 1))))))
  (cont-frac-r 1))


(define (cont-frac-new n d k)
    (define (cont-frac-i index result)
(if (= index 0)
   result
   (cont-frac-i (- index 1)
(/ (n k)
   (+ (d k) result)))))
  (cont-frac-i k 0.0))


1.38

(define (e-D index)
    (cond ((= 1 (remainder index 3))
  1)
 ((= 0 (remainder index 3))
  1)
 (else (* 2 (/ (+ index 1) 3)))))
(define (calc-e k)
    (+ 2 (cont-frac (lambda (i) 1.0) e-D k)))


1.39

(define (tan-cf x k)
    (define (n index)
(if (= index 1)
   x
   (- (square x))))
  (define (d index)
      (- (* 2 index) 1))
  (cont-frac n d k))

SICP 1.34-1.39习题体会