問題1.38、問題1.39 – SICP(計算機プログラムの構造と解釈)その20

問題1.38

問題1.38

(define (cont-frac n d k)
  (define (iter i)
    (if (= i k)
        (/ (n i) (d i))
        (/ (n i) (+ (d i) (iter (+ i 1))))))
  (iter 1))

(define (iter-a-to-b f a b)
  (newline)
  (display a)
  (display " -> ")
  (if (> a b)
      (f a)
      (and (display (f a)) (iter-a-to-b f (+ a 1) b))))

(iter-a-to-b
  (lambda (k)
          (+
            (cont-frac (lambda (i) 1.0)
                       (lambda (i) (if (= (remainder i 3) 2)
                                       (- i (/ (- i 2) 3))
                                       1))
                       k)
            2))
  1
  20)

gosh> 
1 -> 3.0
2 -> 2.6666666666666665
3 -> 2.75
4 -> 2.7142857142857144
5 -> 2.71875
6 -> 2.717948717948718
7 -> 2.7183098591549295
8 -> 2.718279569892473
9 -> 2.718283582089552
10 -> 2.7182817182817183
11 -> 2.7182818352059925
12 -> 2.7182818229439496
13 -> 2.718281828735696
14 -> 2.7182818284454013
15 -> 2.718281828470584
16 -> 2.7182818284585633
17 -> 2.718281828459065
18 -> 2.7182818284590278
19 -> 2.718281828459046
20 -> 2.718281828459045
21 -> 2.7182818284590455

問題1.39

(define (cont-frac n d k)
  (define (iter i)
    (if (= i k)
        (/ (n i) (d i))
        (/ (n i) (+ (d i) (iter (+ i 1))))))
  (iter 1))

(define (iter-a-to-b f a b)
  (newline)
  (display a)
  (display " -> ")
  (if (> a b)
      (f a)
      (and (display (f a)) (iter-a-to-b f (+ a 1) b))))

(define (tan-cf x k)
  (cont-frac (lambda (i) (if (= i 1) x (- (square x))))
             (lambda (i) (- (* 2 i) 1))
             k))

(iter-a-to-b
  (lambda (k) (tan-cf 1.0 k))
  1
  20)

gosh> 
1 -> 1.0
2 -> 1.4999999999999998
3 -> 1.5555555555555558
4 -> 1.5573770491803278
5 -> 1.5574074074074076
6 -> 1.557407722401769
7 -> 1.5574077246432194
8 -> 1.557407724654856
9 -> 1.557407724654902
10 -> 1.557407724654902
11 -> 1.557407724654902
12 -> 1.557407724654902
13 -> 1.557407724654902
14 -> 1.557407724654902
15 -> 1.557407724654902
16 -> 1.557407724654902
17 -> 1.557407724654902
18 -> 1.557407724654902
19 -> 1.557407724654902
20 -> 1.557407724654902
21 -> 1.557407724654902
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»