エンジニアをリングするスマートフォン用の表示で見るエンジニアをリングするプログラをミングしたり。数学SICPが難航してきました。どこからつまづきだしたのかちょっと戻って考えてみると、課題1.11からちゃんと理解できなくなってきたようだったので、課題1.11の解答についてじっくり考えてみたいと思います。ルールの下に定義される。演算する手続を再帰プロセスを用いて書け。演算する手続を反復プロセスを用いて書け。再帰プロセスの方はそのまま翻訳すればいいだけなので書けたのですが、反復プロセスのほうがわからず、答えを見てもなぜそうなるのかわからない感じでした。反復プロセスの方をじっくり見ていきたいと思います。あ、ちなみに再帰プロセスの方の回答は以下。3)))))))そのまんま。反復プロセスの解答こちらから引用。n))きれいなコードですね。疑問f(n)の答えには関数fを適用しないといけないはずなのに、iterの最後の再帰部分ではfを適用していない。2の引数を渡すのか?ちょっと正直意味がわかりませんでした。この内容で正解の値が出ることが信じられませんでした。先日参加したSICP読書会で先輩メンバーにその疑問をぶつけてきました。2...の場合のf(n)の値を考えていなかったことが問題だったようです。2...の場合のf(n)の値を考えてみます。f(n-3)の解から導き出せるこの2点をちゃんと意識したことで、ようやく少し理解できるようになりました。a))で求められる!!解答コードにたどり着きました・・・。挙げていた疑問が解決されました。f(2)の計算済の答えを渡している。f(n)の答えには関数fを適用しないといけないはずなのに、iterの最後の再帰部分ではfを適用していない。f(2)なので消えてない。それらの答えを元にして算出したf(3)以降もfが適用された状態になる。f(n-3)からf(n)が求められるから。目新しいことって別になくて、私が題意をきちんと理解していないことが疑問の原因でした・・・。あと、もういっこ発見。counterについて。counterを0..nで回すのかn..0で回すのかもちょっと迷いました。解答コードはnから0までカウントダウンしています。これは、0..nだとcounterの他にnという初期値を記憶しておかないといけませんが、n..0なら比較に0という定数を使えるので最初のnを覚えておかなくてもいいのでよりシンプルにできるということですね。引数をもうひとつ増やせばカウントアップ方式でも正解が出せました。n))n..0のほうがシンプルですね。n))できた!!!次のつまづき課題1.12はできてたので、次にできなかったのは1.13です・・・。続く1.14、1.15も挫折してるのでそっちはちゃんとやりたいかも。(1.2.3)minghaiさんによるSICP全訳を読んでいます。(1.2.2)minghaiさんによるSICP全訳を読んでいます。minghaiさんによる翻訳の更新を反映しました。»はてなブログをはじめよう!yoshiko_pgさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。