空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

SICPを読み始めた

etolispの実装はC/C++のstackモデルにどっぷり使っていて,末尾呼び出しの最適化や,call/cc のサポート(Common-Lispにそれは求められていないかも知れないが)をするときに,何かひねりを加えなければならなそう。etolispは,面白い実装が思いつくまでしばらく開発を止めているわけだが,Paul Grahamの赤い本だけではいい加減,知的枯渇を覚え始めてきた。

赤い本でようやくカッコとコッカの基本は学べたので,そろそろ定本ともいうべきSICPに取りかかる。原著がネットで公開されているので,とりあえず wget してじっくり読み進めている。焦らず,1日 subsubsection を1つずつ読む計画。といいつつ面白くて,1.2の途中まで読んでしまった。自分を追い込むためにも,進捗を書いて行った方が良いかな?何らかの形で知的再生産ができそうだったら書いてみようと思います。

実用的なプログラミングのためのオブジェクトシステムがどうなっているのか未知数だが,とりあえずdefunよりもdefineの方がアタマヨサソウで好きだ。

本書の記述で興味深かったのは,Schemeの世界では,末尾呼び出しとループが完全に同義であるということ(いきなり再帰呼び出し関数が iterative processだと書いてあってギョッとした)。for とか while などが明示的に使われていなくても,末尾再帰として記述されていれば,それは while と書いているのと同じと見るようだ。てゆうか,for,while などは末尾再帰の 構文糖衣syntactic sugar に過ぎないようだ。

With a tail-recursive implementation, iteration can be expressed using the ordinary procedure call mechanism, so that special iteration constructs are useful only as syntactic sugar.

元々はコンパイラの最適化技術にインスパイアされたものらしい。実装はCで書かれている(たぶんwhileの)くせに何をえらそーに…と思ったかどうかは詳らかにしないでおきましょう。

赤い本ことANSI Common LISP (Prentice Hall Series in Artificial Intelligence)はこちら。

ANSI Common LISP (Prentice Hall Series in Artificial Intelligence)

ANSI Common LISP (Prentice Hall Series in Artificial Intelligence)