The Little Schemer を読了した。正月休みに読み始めていた。

ひとくちに再帰といっても、よくわかっていないところが多い。うまく制御できずに無限ループを引き込んでしまうのが怖い。そういう畏怖に似た感情をもつ人は少なくないのではないか。かくいう僕自身がそうであった。

以前に Scheme のチュートリアルに取り組んだときには、末尾再帰という概念を覚えた。単純なループを再帰で表現できるというアイデアになるほどと納得したいっぽうで、いきおい特殊なケースにしか適用できない、つまり単純でないループでは不利になるような印象は残っており、難しいなという印象は変わらず残っていた。

関数型言語というものについて、どうにもお客様のような立場で入門をしては離れて、を繰り返してきた。言い換えると、あれこれ手探りで取り組んでみるが、体得できたという感覚を持つことはできていなかったわけだ。そこにきて本書が、いよいよ関数プログラミングの本質的なコツを伝授してくれたという実感がある。

本書の表紙裏には、十戒になぞらえた10個の原則が掲げられていて、これらをひとつずつ咀嚼するように教育してくれる。原則ありきで実践を促されるわけでなく、実践ありきの野暮な原則になるわけでもなく、原則と実践が一体となって提示されるように本文が運ばれている。対話を模倣したスタイルで進行する本文も親身である。総じて、簡単でない内容が平易に、実例豊富に、ユーモアを添えて、コンパクトにまとめられていて、古典たる由縁を思い知らされた。名著である。

ごく簡単な事例から入って、自然再帰という方法論から再帰関数の定義をごくシンプルに定式化してみせる。それだけで十分値打ちがあるはずが、さらに深く(とおもうのは読み手の力量不足にすぎないのかもしれないが)潜りこんで、コラッツ予想、アッカーマン関数をジャブにして、ゲーデルの不完全性定理が実例とともに示される。そうして計算不可能性というものを思い知った上で、最後の章ではなんと Lisp インタプリタを Lisp で実装することになる。思いもよらない難度の課題に尻込みもしつつ、親身なテキストのおかげで、(実態としてはコードを写経したにすぎないとはいえ)インタプリタが出来上がってしまった。恐るべきことであった。

続編として、 The Seasoned Schemer という教科書がある。独立した応用編というよりも、最初から二巻本として意図されている様子であることが、あとがきの代わりに「インターミッション」という見開きが用意されていることからもわかる。これも素敵な遊び心である。

その「インターミッション」も破格のものである。いわく、すぐに続編に進まずに、ぜひしばらく時間をおいて、リラックスし、またやりたくなったときに続きを求めてほしいとのことである。この商売っ気のなさよ! 帝王的なスタンスにいっそう思い入れを深めざるをえない。

The Seasoned Schemer に進むより先に、『不思議の国のアリス』を読むように勧められている。これもまた、アカデミズムの遊び心を感じる。社会の荒波に揉まれて失念していたが、大学というのはこのようにして、遊びと研究が渾然一体となった、幸せな環境であったのだなと思い出す。難しいはずのことを、このようにのびのびと、ユーモラスに伝えてくれる先生というのは、僕にとって幸いなものであるし、未来の社会にとっても必要不可欠なものであるのだろうな、と思いを馳せた。