SICP問題1.38

整数の割り算の答えだけってどうやって取るのか分からんのででっち上げる

(define (divide-integer x y)
  (let ((r (remainder x y)))
    (if (= r 0) (/ x y)
	(/ (- x r) y))))
(define (euler k)
  (cont-frac (lambda (i) 1.0)
	     (lambda (i) (if (= (remainder i 3) 2)
			     (* (+ (divide-integer i 3) 1) 2)
			     1))
	     k))

テスト

(euler 10)
; 0.7182817182817183
(euler 20)
; 0.7182818284590452

ん? 全然 e じゃないような。と思ったらこれに+2しないといけないのか。
ということで修正。

(define (e-2 k)
  (+ 2
     (cont-frac (lambda (i) 1.0)
		(lambda (i) (if (= (remainder i 3) 2)
				(* (+ (divide-integer i 3) 1) 2)
				1))
		k)))

再度テスト

(e-2 1)
; 3.0
(e-2 2)
; 2.6666666666666665
(e-2 3)
; 2.75
(e-2 4)
; 2.7142857142857144
(e-2 5)
; 2.71875
(e-2 6)
; 2.717948717948718
(e-2 7)
; 2.7183098591549295
(e-2 8)
; 2.718279569892473
(e-2 9)
; 2.718283582089552
(e-2 10)
; 2.7182817182817183