達人出版会から出ているつくって学ぶプログラミング言語 RubyによるScheme処理系の実装のタイトルがかなり気になったので、読んでみました。
プログラミング言語をつくる、という何者にも代えがたい体験
この本はLISP方言であるSchemeという言語をRubyで実装してみよう!という本です。Scheme自体はこんな感じのコードになります。
(define (makecounter) (let ((count 0)) (lambda () (let ((dummy (set! count (+ count 1)))) count))))
こういったコードをRubyで実行できるように、実装を進めていく本です。
はじめは
[[:lambda, [:x, :y], [:+, :x, :y]], 3, 2]
という感じの、Rubyで簡単に処理できるデータ構造でコードを表現しながら実装を進めていくのですが、途中からカッコで表現される、Schemeらしいコードに大変身します。
この本のキモは、実装を通してλ式とクロージャの違いをはっきりと理解できることかなーと思います。λ式自体は単なるコードなのですが、クロージャはλ式を評価した時の環境を内包しています。「クロージャって何なのよ」と思っている方は、この本を読みながら実際に手を動かして実装してみることで、かなり本質的な理解を得ることができると思いますよ。
Rubyを使っているのも、良いですね。ここまで処理系を簡単に記述できるのも、Rubyの表現力の強さの賜物のような気がします。処理系を書く、という通常あまりしない体験をしてみることで、普段Rubyを使っている方のRuby力アップにも役立つと思います。
更に、この本をきっかけにSchemeというLISP方言を知ることで、関数型言語の世界に進んでみても良いでしょう。普段Rubyを使っていて関数型言語に興味がある!という方は、SICPを読むより先に、この本から始めるのが良さそうです。