Featured image of post 評判通りの良書「Land of Lisp」: Lispを学ぶということ

評判通りの良書「Land of Lisp」: Lispを学ぶということ

今更ながら、「Land of Lisp」を読了しました。

Emacsユーザーである自分にとっては、近くて遠い存在でだったCommon Lispについてフランクに学べるとてもよい一冊でした。 他数々のレビューに「聖典」とまで称されるに相応わしい良書だったと思います。なにより、読みやすいことと、読んでいて楽しいという点が素晴しかったです。

なぜLisp?

特に最初の方に色々と言語の強みについて書かれています。後半写経していくと、実感できるところも沢山あります。

私はLispそのものに魅力を感じている人間なので、この本で主張されているようなLispの利点などについては納得しかないですが、誰にでもあてはまるとは思っていません。

Lispそのものや、Lispを学習するということについて、賛否様々な意見を見かけますが、こういうのは好みの話なのでどちらでもいいんじゃないかなと私は思ってます。 自分の場合は単純にLispが好きなのでやってる感じです。Emacsも好きで使ってますし。

好きだから、とかやりたいから、っていうのは行動原理としてとても本質的なので、すごく大事だと思っていて。 特に年齢を重ねてくるとそういうモチベーションで活動することの大事さをより強く感じる気がします。

あとは、頭の体操にもなると思ってます。 人間というのは怖いもので、一度ロックインされてしまうと、中々他の考え方を受けいれ難くなっていくんですよね。 これも年齢が上がるほどそうなんですけど^^;

でもこれがロックインされている、っていうことに気づくには、それ以外の考え方を知らないとわからないわけで。

プログラミングに限らず、普段触れている物事と違ったものに触れるというのは、自分の思考を柔軟にするのにとてもよい方法のひとつだと思うわけです。 Lispを学ぶということにも、そういった効果もあるのかなと思います。

再帰プログラミング

Common Lispには loop マクロがあり、Land of Lispでは、その説明に1章使われています。

一方Lispではとても自然な形で再帰がよく利用されます。

Common Lispではないですが、「リスト遊び」 や 「Scheme手習い」 など、再帰プログラミングにフォーカスしている書籍もあります。

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language) Amazonで見る
Scheme手習い - The Little Lisper Amazonで見る

「Land of Lisp」の中でも再帰が多用されています。 ゲームを作る中で必要なところで自然と再帰が使われているので、 コード中のどういうシーンで再帰を使っていて、どういうケースは loop を使っているのかを見るのも勉強になるかもしれません。

Haskellでは反復を表現するのに for 文のようなシンタックスはないので、 loop マクロの存在はLispの柔軟性の表れなのかもしれないな、とも思ったり。

関数プログラミング

この本で説明されている内容は、実際に関数プログラミングを開発で利用するための説明としては必要十分じゃないかと思いました。

自分が以前Haskellを使って学習していたときは、より制限が強く、また数学的な側面まで触れていましたが、何かをうまく開発するための道具としては率直にtoo muchかなと思っていました。

しかし逆に言うとCommon Lispは言語として関数プログラミングを逸脱していることを警告してくれる仕組みはないということなので、意識して書かないとうまくコーディングできない可能性はあります。 意図しないところに副作用を入れてしまったりとか。

13.5章のマンガでもHaskellを揶揄して、Lispの良さとこの辺のトレードオフに関して主張されてました。こういうコミカルな表現が多分に使われているところが本書の良いところですね。

メタプログラミング

17章の簡単なDSLの開発とマクロの解説を通して、Lisp マクロの強力さと、それによるメタプログラミングの可能性をほんの少しですが体験することができると思います。

ちなみにReact.jsのJSXってJavaScriptの言語拡張なので、JavaScript方言とか言ってもいい気がしますよね。 Reactではbable.jsを使って、ある意味むりやり実現しているわけですが、Lispのマクロはこれと同じようなことを言語の仕組みそのもので実現しているイメージです。

まとめ

「Land of Lisp」を読んで、思ったことをつらつらと書いてみました。

自身がLispを学んでいる理由と、そこから得られると思われるいくつかのプログラミング技法に関する知識について触れてみました。 これらの技法はLispだけでなく、他の多くの言語でも利用できるものであり、中には近年流行しているものもあります。

Lispは非常に古くからある言語ですが、こういった最近の流行の技法と言われているものも、元々利用できる言語だったことが伺えます。 書籍内でもLispで実現されたアイデアが他の言語で使われている、などの記述がありますが、これが「古くて新しい」などの枕詞で紹介されることがある所以だと思います。

ちなみに、本格的にCommon Lispで開発してみたい場合は、開発環境などへの言及はないので、別途情報を収集する必要があるかもしれません。 自分はEmacs/SLIMEでやってました。

地球上でもっともパワフルなプログラミング言語であると言われながら、その謎めいたシンタックスやアカデミックな評判の高さなどから敬遠されることもあったLisp。そんなLispの不遇な時代に終わりを告げるのが本書『Land of Lisp』(Lispの国)です。不思議なマンガやout-of-this-worldなゲームの数々とともに、ベテランLisperの著者が、謎多きCommon Lispを伝授。リストの操作、入出力、再帰などの基礎から始めて、さらにマクロや高階プログラミング、ドメイン特化言語などへと話題をすすめながら、Lispのより高度なテクニックについて解説しています。 翻訳者によるサポートページ(
Land of Lisp
Built with Hugo
テーマ StackJimmy によって設計されています。