木構造

再帰なんて全然ちゃんと書けないしそもそもきちんとSICPも理解していない
私が言うのもなんだけど・・・Schemeの文法に全く慣れません(*´-ω-`)
分かったつもりで分かってない事がたくさんあります
その1コとして木構造がありました
フィボナッチの条件式などは書いたのでid:nishiohirokazuさんに教えて頂いた事を
忠実に守って書こうと思います
(Biogって結構自分自身へのメモだったりする事も多い訳なんですがw)

問題1.2
5+4+(2-(3-(6+(4÷5))))/3(6-2)(2-3)
次の式を前置記法に翻訳せよ

一気に考えると分からなくなるからちょっとずつ細かい部品に分けて分解するんだったよね

まず5+4+(2-(3-(6+(4÷5))))÷3(6-2)(2-3)にすればいいよね?
            ↓
(/(+ 5 4(- 2(- 3(+ 6 (/ 4 5))))))
ココまで出来た
3(6-2)(2-3)なんだけど括弧の中を展開して3に掛け算する訳だから
(* 3 (- 6 2)(- 2 3))
まとめると
(/(+ 5 4(- 2(- 3(+ 6 (/ 4 5)))))) (* 3 (- 6 2)(- 2 3))

多分あってる。。。
最初はフィボナッチの漸化式 fib(n) = fib(n-1)+fib(n-2)
この式をschemeに書き換えるのも大変だった

         fib(n-1)    +    fib(n-2)
      ↓                      ↓ 
    fib(- n 1)               fib(- n 2)   
符号が2個混ざってるけど分解して上から書いちゃえばいいんだ!
          (+(fib(- n 1))(fib(- n 2)))                   

SICPの問題もブログだから整理して書いてあるけど手書きしました
今日はフィボナッチにチついてもやっと理解出来て来たと思います
ホントに最近まで(+(fib(- n 1)(fib(- n 2)))のfibを数学的捉え方をしていて
引数として理解出来ていませんでした
fib(- n 1)は フィボナッチのn個目の数字の1コ前ってことですよね
fib(- n 2)も一緒です
この2個の値を足して始めてn個目のフィボナッチの数字に辿り着くんですよね
コレを理解した時に始めて再帰的手法でフィボナッチのn個目の数値を求める
プログラムが書けるなぁと思いました
まだまだすぐにはプログラムとして書けないのでまた手書きででも木構造を考えていきたいと思います
ココまでSICPで学んだいろいろを書いたので時間を作ってすごく難しいSICPの問題の
解いた結果をBlogに書きたいと思います
次回のは本気で難しいですよ!!
フィボナッチが出てくる事だけは確実ですw