SICP問題1.39
cont-frac にoperator を渡せるようにして、tan-cfを定義する
(define (cont-frac-ope fn fd k ope) (define (iter-frac i result) (let ((n (fn i)) (d (fd i))) (if (= i 0) result (iter-frac (- i 1) (/ n (ope d result)))))) (iter-frac k 0) ) (define (tan-cf x k) (define (fn i) (if (= i 1) x (square x))) (define (fd i) (- (* i 2) 1)) (cont-frac-ope fn fd k -))
一応テスト。合ってるのかどうかさっぱり分からん。
(tan-cf 1.0 1) ; 1.0 (tan-cf 1.0 2) ; 1.4999999999999998 (tan-cf 1.0 3) ; 1.5555555555555558 (tan-cf 1.0 4) ; 1.5573770491803278 (tan-cf 1.0 5) ; 1.5574074074074076 (tan-cf 1.0 6) ; 1.557407722401769 (tan-cf 1.0 7) ; 1.5574077246432194 (tan-cf 1.0 8) ; 1.557407724654856 (tan-cf 1.0 9) ; 1.557407724654902 (tan-cf 1.0 10) ; 1.557407724654902
Web の他の人の答え見てたら別に cont-frac-ope なんて定義する必要ナサゲだった。
確かにNk/Dkの部分の符号が反転すればよいだけか。ということで書き直し。
(define (tan-cf x k) (cont-frac (lambda (i) (if (= i 1) x (- (* x x)))) (lambda (i) (- (* i 2) 1)) k))