めでたい! 「Scheme 手習い」が復刻しました。正確に言うと、復刻ではなく、新しい版に基づいた新しい訳です。
- 作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一
- 出版社/メーカー: オーム社
- 発売日: 2010/10/22
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 129回
- この商品を含むブログ (34件) を見る
以前、マグロウヒル出版から出版されていた「Scheme手習い―直感で学ぶLisp」は、"The Little Lisper" の訳です。内容が、Common Lisp でもなく、Scheme でもない Lisp の方言によって書かれているのに、邦題に Scheme が入っていたのは、この本の唯一の欠点だと僕は感じていました。
今回は、"The Little Schemer" の訳です。原書も訳書も名実共に Scheme に基づいています。現在では、Lisp と言えば、Common Lisp か Scheme のことを指すようになりました。Scheme の実装も簡単に手に入ります。また、Lisp の価値も見直されています。よい時代に、よい翻訳書が現れました!
学ぶのは再帰
この本で学ぶのは「再帰プログラミング」です。
世界的に有名な Joel Spolsky 氏のエッセイの一つに「Java スクールの危険」があります。一部を引用します。
私のささやかな経験から言わせてもらうと、伝統的に大学のコンピュータサイエンスのカリキュラムで教えられているもので、多くの人がうまく理解できないものが2つあった: ポインタと再帰だ。
優秀なプログラマーとそうでないプログラマーを分ける指標の一つが、再帰を理解しているか否かです。優秀なプログラマーを目指すなら、再帰的な考え方を学ぶ必要があります。本書は、再帰を学ぶための最高の入門書です。
解説
Scheme 手習いは、習うより慣れろという感じで書かれているので、パズルを解くような楽しさがあるのですが、一方で、その背景や目的を理解しないまま読んでしまう恐れがあります。そこで、各章を少し解説しておきます。何をやっているのか分からなければ、以下を読んでみて下さい。
第1章
Scheme の基本的な関数 car、cdr、cons、null?、atom?、および eq? を学びます。Lisp を知らない人は、新鮮な感じで読めるでしょう。注意していただきたいのは、Lisp を中途半端に知っている人です。第1章を立ち読みして「なんだ知っていることばかりで、つまらない」と思って買うのを止めないで下さい。再帰が出てくるのは2章以降です。
分かっている人から見れば、これらの基本関数と(さらに cond と quote と)関数を定義する環境があれば、ピュアな Lisp が作れるという厳選された関数ばかりです。10章で、Scheme のインタープリターを作る際は、第1章に立ち返ってみて下さい。これらが珠玉のプリミティブだということが分かるでしょう。
第3章
入力のリストから出力として新しいリストを生成します。入力のリストは破壊されません。これが関数プログラミングの流儀です。リストを生成するには cons を使います。cons は、オブジェクト指向言語でいう new、C 言語でいう malloc() にあたります。大切なので、も一度言います。新しい値が作り出されるので、古い値は破壊されないのです。(不要になった古い値は、ゴミとして自動的に回収されます。)
第6章
影法師とは、補助関数のことです。補助関数というインターフェイスを定義して、データを抽象化します。(プログラムは理解しやすくなりますが、Scheme にはアクセス制御がないので、安全にはなりません。)
第7章
リストで集合を表現して、集合演算を実装します。
第8章
ついに、引数として関数が指定されるようになります。関数型言語では、関数が第一級の値であり、その素晴らしさが実感できるでしょう。継続も登場します。
あわせて読みたい
原書 "The Little Schemer" の解説記事も書いていますので、あわせてどうぞ。