開発環境
- 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.2(手続きとその生成するプロセス)、1.2.2(木構造再帰)の問題1.11、1.12を解いてみる。
問題 1.10
再帰的プロセスの方法でfを計算する手続き。
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
$ scheme
MIT/GNU Scheme running under MacOSX
Type `^C' (control-C) followed by `H' to obtain information about interrupts.
Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Image saved on Friday April 13, 2012 at 9:02:52 AM
Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/C 4.118
Edwin 3.116
1 ]=>
(define (f n)
(cond ((< n 3) n)
(else (+ (f (- n 1))
(* 2
(f (- n 2)))
(* 3
(f (- n 3)))))))
(f 1)
(f 2)
(f 3)
(f 4)
(f 5)
(f 6)
(f 7)
(f 8)
(f 9)
(f 10)
;Value: f
1 ]=>
;Value: 1
1 ]=>
;Value: 2
1 ]=>
;Value: 4
1 ]=>
;Value: 11
1 ]=>
;Value: 25
1 ]=>
;Value: 59
1 ]=>
;Value: 142
1 ]=>
;Value: 335
1 ]=>
;Value: 796
1 ]=>
;Value: 1892
1 ]=> (f 100)
^C
Interrupt option (? for help):
;Quit!
1 ]=> ^D
End of input stream reached.
Moriturus te saluto.
$
100は時間がかかったので中断。
反復的プロセスの方法でfを計算する手続き。
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
$ scheme
MIT/GNU Scheme running under MacOSX
Type `^C' (control-C) followed by `H' to obtain information about interrupts.
Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Image saved on Friday April 13, 2012 at 9:02:52 AM
Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/C 4.118
Edwin 3.116
1 ]=>
(define (f n)
(if (< n 3)
n
(g 2 1 0 n)))
(define (g a b c count)
(if (< count 3)
a
(g (+ a
(* 2 b)
(* 3 c))
a
b
(- count 1))))
(f 1)
(f 2)
(f 3)
(f 4)
(f 5)
(f 6)
(f 7)
(f 8)
(f 9)
(f 10)
;Value: f
1 ]=>
;Value: g
1 ]=>
;Value: 1
1 ]=>
;Value: 2
1 ]=>
;Value: 4
1 ]=>
;Value: 11
1 ]=>
;Value: 25
1 ]=>
;Value: 59
1 ]=>
;Value: 142
1 ]=>
;Value: 335
1 ]=>
;Value: 796
1 ]=>
;Value: 1892
1 ]=> (f 100)
;Value: 11937765839880230562825561449279733086
1 ]=> ^D
End of input stream reached.
Moriturus te saluto.
$
反復的プロセスでは100でもすぐ評価できた。
問題 1.12
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
$ scheme
MIT/GNU Scheme running under MacOSX
Type `^C' (control-C) followed by `H' to obtain information about interrupts.
Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Image saved on Friday April 13, 2012 at 9:02:52 AM
Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/C 4.118
Edwin 3.116
1 ]=>
(define (pascal-triangle m n)
(cond ((< m n) (* 0 m)) ; 存在しない場合は0に
((or (= n 0)
(= m n)) 1)
(else (+ (pascal-triangle (- m 1) (- n 1))
(pascal-triangle (- m 1) n)))))
(pascal-triangle 0 1)
(pascal-triangle 0 0)
(pascal-triangle 1 0)
(pascal-triangle 1 1)
(pascal-triangle 2 0)
(pascal-triangle 2 1)
(pascal-triangle 2 2)
(pascal-triangle 3 0)
(pascal-triangle 3 1)
(pascal-triangle 3 2)
(pascal-triangle 3 3)
(pascal-triangle 4 0)
(pascal-triangle 4 1)
(pascal-triangle 4 2)
(pascal-triangle 4 3)
(pascal-triangle 4 4)
(pascal-triangle 4 5)
;Value: pascal-triangle
1 ]=>
;Value: 0
1 ]=>
;Value: 1
1 ]=>
;Value: 1
1 ]=>
;Value: 1
1 ]=>
;Value: 1
1 ]=>
;Value: 2
1 ]=>
;Value: 1
1 ]=>
;Value: 1
1 ]=>
;Value: 3
1 ]=>
;Value: 3
1 ]=>
;Value: 1
1 ]=>
;Value: 1
1 ]=>
;Value: 4
1 ]=>
;Value: 6
1 ]=>
;Value: 4
1 ]=>
;Value: 1
1 ]=>
;Value: 0
1 ]=> ^D
End of input stream reached.
Moriturus te saluto.
$
問題 1.13
ϕ、φは方程式、
x^2 - x - 1 = 0
x^2 = x + 1
の解で、
x^(n+1) = x^n + x
となるから、
(ϕ^(n+1) - φ^(n+1)) / √5
=((ϕ^n + ϕ^(n - 1)) - (φ^n + φ^(n - 1))) / √5
=(ϕ^n - φ^n) / √5 + (ϕ^(n - 1) - φ^(n - 1)) / √5
= Fib(n) + Fib(n - 1) = Fib(n+1)
よって帰納的にnを整数とすれば、
Fib(n) = (ϕ^n - φ^n) / √5
が成り立つ。
|Fib(n) - ϕ^n / √5|
= |φ^n / √5|
< |φ / √5|
= |1/2 - 1/2√5|
< 1/2
よってFib(n)がϕ^n/√5に最も近い整数である。
(証明終)
0 コメント:
コメントを投稿