開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション)の1(手続きによる抽象の構築)、1.3(高階手続きによる抽象)、1.3.3(一般的方法としての手続き)の問1.38、問1.39を解いてみる。
その他参考書籍
問題 1.38.
コード
sample.scm
(define (cont-frac n d k)
(define (frac-iter i result)
(if (= i 0)
result
(frac-iter (- i 1) (/ (n i) (+ (d i) result)))))
(frac-iter k 0))
(define (cont-frac-iter n d k i)
(newline)
(display k)
(display " *** ")
(define x (cont-frac n d k))
(display (+ x 2))
(if (< k i)
(cont-frac-iter n d (+ k 1) i)))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=>
(cont-frac-iter (lambda (i) 1.0)
(lambda (i) (if (= (remainder i 3) 2)
(* 2 (/ (+ i 1) 3))
1.0))
1
10)
1 *** 3.
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
;Unspecified return value
1 ]=>
問題 1.39.
コード
sample.scm
(define (cont-frac n d k)
(define (frac-iter i result)
(if (= i 0)
result
(frac-iter (- i 1) (/ (n i) (+ (d i) result)))))
(frac-iter k 0))
(define (tan-cf x k)
(cont-frac (lambda (i) (if (= i 1)
x
(* -1
(square x))))
(lambda (i) (- (* 2 i) 1))
k))
(define (tan-cf-iter x n)
(tan-cf-iter-inner x 1 n))
(define (tan-cf-iter-inner x k n)
(newline)
(display k)
(display " *** ")
(define a (tan-cf x k))
(display a)
(if (< k n)
(tan-cf-iter-inner x (+ k 1) n)))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=> (tan-cf 0 10) ;Value: 0 1 ]=> (tan-cf (/ 3.14 4) 10) ;Value: .9992039901050428 1 ]=> (tan-cf (/ (* 3 3.14) 4) 10) ;Value: -1.0023918385609834 1 ]=> (tan-cf (* -1 (/ 3.14 4)) 10) ;Value: -.9992039901050428 1 ]=> (tan-cf (* -1 (/ (* 3 3.14) 4)) 10) ;Value: 1.0023918385609834 1 ]=> (tan-cf 3.14 10) ;Value: -1.592656810496839e-3 1 ]=> (tan-cf-iter 3.14 10) 1 *** 3.14 2 *** -1.3732579159134644 3 *** -.36552838016558864 4 *** -.08327550432757211 5 *** -1.2564132006352343e-2 6 *** -2.5047690032355793e-3 7 *** -1.6447971997619203e-3 8 *** -1.5948570601372388e-3 9 *** -1.592726838150251e-3 10 *** -1.592656810496839e-3 ;Unspecified return value 1 ]=> (tan-cf-iter (/ 3.14 4) 10) 1 *** .785 2 *** .9879288103952764 3 *** .9989925703264279 4 *** .9992018697579907 5 *** .9992039767162123 6 *** .9992039900467972 7 *** .9992039901048574 8 *** .9992039901050424 9 *** .9992039901050428 10 *** .9992039901050428 ;Unspecified return value 1 ]=> (tan-cf-iter (/ (* 3 3.14) 4) 10) 1 *** 2.355 2 *** -2.774913836274192 3 *** -1.218205755862148 4 *** -1.0250708291420498 5 *** -1.0038605190931955 6 *** -1.0024543945558377 7 *** -1.0023937364752231 8 *** -1.0023918818442126 9 *** -1.0023918393212117 10 *** -1.0023918385609834 ;Unspecified return value 1 ]=> (tan-cf-iter (* -1 (/ 3.14 4)) 10) 1 *** -.785 2 *** -.9879288103952764 3 *** -.9989925703264279 4 *** -.9992018697579907 5 *** -.9992039767162123 6 *** -.9992039900467972 7 *** -.9992039901048574 8 *** -.9992039901050424 9 *** -.9992039901050428 10 *** -.9992039901050428 ;Unspecified return value 1 ]=> (tan-cf-iter (* -1 (/ (* 3 3.14) 4)) 10) 1 *** -2.355 2 *** 2.774913836274192 3 *** 1.218205755862148 4 *** 1.0250708291420498 5 *** 1.0038605190931955 6 *** 1.0024543945558377 7 *** 1.0023937364752231 8 *** 1.0023918818442126 9 *** 1.0023918393212117 10 *** 1.0023918385609834 ;Unspecified return value 1 ]=> (tan-cf-iter 3.14 10) 1 *** 3.14 2 *** -1.3732579159134644 3 *** -.36552838016558864 4 *** -.08327550432757211 5 *** -1.2564132006352343e-2 6 *** -2.5047690032355793e-3 7 *** -1.6447971997619203e-3 8 *** -1.5948570601372388e-3 9 *** -1.592726838150251e-3 10 *** -1.592656810496839e-3 ;Unspecified return value 1 ]=> (tan-cf-iter 2.0 10) 1 *** 2. 2 *** -6.000000000000002 3 *** -2.4444444444444446 4 *** -2.2033898305084745 5 *** -2.1858585858585857 6 *** -2.1850643117680937 7 *** -2.185040388213639 8 *** -2.185039871780394 9 *** -2.185039863369829 10 *** -2.1850398632626273 ;Unspecified return value 1 ]=> (tan-cf-iter 5.0 10) 1 *** 5. 2 *** -.6818181818181818 3 *** .37037037037037035 4 *** 1.835443037974684 5 *** 29.305555555555483 6 *** -5.0538315389487 7 *** -3.6106314463060607 8 *** -3.4085588621288947 9 *** -3.3831320829619007 10 *** -3.380704932187744 ;Unspecified return value 1 ]=> (tan-cf-iter 10.0 10) 1 *** 10. 2 *** -.3092783505154639 3 *** 1.452991452991453 4 *** -1.5967885816235503 5 *** 4.0846298591032164e-2 6 *** 1.479788993486389 7 *** -4.5453357495488795 8 *** -.8072582019739348 9 *** -.15350381575394778 10 *** .2202426219807905 ;Unspecified return value 1 ]=> ^D End of input stream reached. Moriturus te saluto.
0 コメント:
コメントを投稿