明日はSICP-Lite #2

ていうか、全然予習してないよ〜。

と言うことで、本(1.2 手続きとその生成するプロセス)を読み読み。

まだまだ序盤なんだけど、初心者には理解しがたい再帰プロセスと反復プロセスの話。

Cとか普通の言語で、手続きの中で自分自身を呼び出してたら、『問答無用で再帰だ〜』となるのだが、Schemeの世界では異なる。

Schemeの場合、反復プロセスで書いたら、それが普通の言語のループのように扱ってくれるらしい。そのため、余計なスタックを消費せずに、固定のメモリ量で計算できるらしい。

でも、正直イメージが湧きにくいし、人にも説明しにくいんだよな〜、なんて思ったら、思い出した!! id:tkuroがいい例えを書いてくれてた、と言うことで、勝手に引用さしてもらう(スマソ)。
http://d.hatena.ne.jp/tkuro/20080421/1208758709

末尾再起版(というかfoldl)の僕の理解の仕方はベルトコンベア。ベルトコンベアに乗ったリスト(下ではinit)が次々と次の段(fold再起)を流されていってデコレートされていく、というイメージ。んで材料(lst)が尽きたらデコレートされ終わった「できあがりリスト」を返す。

SICPの例では、階乗についてだけど、初期値をベルトコンベアに乗っけたら、あら不思議、回答がでてきたわ〜、みたいな感じ(適当すぎる。。。)。

式を後回しにして、とりあえず処理を進める。後ろの値は後ろの関数に丸投げして任せっきり。自分は自分のみ担当あとは知らん。

何となく、上司が大きな仕事を一つランクを下げて、下に回していって、部下からの報告を待つぜ、と言う感じか(本当に適当すぎ!!)

ま、まずは定性的に理解することが大事ってことで(涙)