問題解答
問1.37
(define (cont-frac n d k)
(define (cont-sum i)
(if (= i k)
(/ (n i) (d i))
(+ (/ (n i) (+ (d i) (cont-sum (+ i 1)))))))
(cont-sum 1))
再帰版はうまく作れなかったのでカンニング。
(define (cont-frac-iter n d k)
(define (cf-iter v i)
(if (= i 0)
v
(cf-iter (/ (n i) (+ (d i) v)) (- i 1))))
(cf-iter (/ (n k) (d k)) k))
4 桁の精度の近似を得る。
(cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 9) →0.6181818181818182 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 10) →0.6179775280898876 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 11) →0.6180555555555556 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 12) →0.6180257510729613
11 くらいあれば OK?
問1.38
(+ 2 (cont-frac (lambda (i) 1.0)
(lambda (i)
(if (= (mod (+ i 1) 3) 0)
(* (/ (+ i 1) 3) 2.0)
1.0))
12))
問1.39
(define (tan-cf x k)
(define (cont-tan i)
(let ((squareX (* x x))
(d (- (* i 2) 1)))
(cond ((= i k) (/ squareX d))
((= i 1) (/ x (- d (cont-tan (+ i 1)))))
(else (/ squareX (- d (cont-tan (+ i 1))))))))
(cont-tan 1))
(tan-cf 1.0 10)