問題解答
問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)