Cogito Ergo Sum.

我思う故に我あり

Gaucheの記事を読んでRubyの理解を深める…。

 月刊誌「日経ソフトウエア」で2009年7月号〜2010年6月号の1年間に渡り、関数型言語Gaucheの記事が連載されていた(kikaineko氏による「魔法の言葉 関数型言語を学ぼう」)。

 Gaucheは日本人ハッカー川合史朗氏の手によるScheme処理系で、SchemeLisp方言の1つ。関数型言語には以前から興味があったのだが(今ならF#とか…)、ビビッて手を出せずにいた。それが最近、フと思いついてこの連載をまとめて読んでみた。

 連載内容は、前置記法(ポーランド記法)やリスト(というデータ構造)を軽く紹介するところから始まり、主に「再帰」と「高階関数」に焦点を当てた内容となっていた(もちろん、「高階関数」の後には「ラムダ」についても解説されていた)。

 面白かった。関数型言語というものを全く知らなかったので、純粋に知的好奇心を満たされた、ということもあるのだけど(例えば、「木構造」みたいなデータをリストであればごく自然に記述できることに驚いた)、手続き型言語なら寝惚けていても書けそうな処理でも関数型言語では全く異なる発想を求められるようなところが特に面白かった。

 「ないものねだり」傾向の強い僕としては、更にもう一歩、「手続き型言語関数型言語の背後にある計算モデルの違いがどういう発想に基づいているのか」「その違いが言語仕様にどのように表れているのか」といったやや概念的な話にまで踏み込んで欲しかったが、そうでなくとも充分面白かった。

 それに、連載を読んでいてむしろビンビン感じたのはRuby関数型言語としての側面。以前からRubyには興味をもっていて、入門書を何度か読みかけているのだけど、Rubyを単に「オブジェクト指向スクリプト言語」みたいに捉えていると、いつも途中で、これまで読んだBasicやC、Javaの入門書には決して感じられない匂いを感じ、「これっていったい何だろう? UNIXスクリプト言語Perlだとか、sedだのawkだのTcl/Tkだの…)に特有の匂いなのだろうか?」とモヤモヤした気分になってしまっていたのだ。それがこの連載を読んで関数型言語に由来するものなのだとわかってスッキリした(例えば、Rubyの配列は本当に柔軟で「何でも配列に突っ込める」のだけれど、それはLispの「何でもリストに突っ込める」というところから受け継いでいるのだろうと思う。Lispの欠点は何重にも入れ子になったカッコの構造が直感的に把握しづらいことだと思うのだけど、それをRubyではオブジェクト指向の「ドット記法」で解決してしまったのだと思う)。

 関数型言語というものを知って、副作用的にRubyの理解が進みそうな予感(「副作用がない」のが純粋関数型言語の特徴のはずだけど…(笑))。

 「日経ソフトウエア」でkikaineko氏がGaucheの連載を書く前にやっていたのがRubyの連載(「Rubyをめぐる冒険」2008年7月号〜2009年6月号。2009年11月号の特別付録として全12回分がまとめられている)。あれもう1回読んでみようかな!


※ 「魔法の言葉 関数型言語を学ぼう」自体も特別付録として1冊にまとめて欲しい! 是非是非!