Entry

今日読んだ本 - 『入門Common Lisp』

2009年04月17日

あたしゃ普段エディタに xyzzy を使ってるんですけど,これを Lisp の処理系としてみると,やってることといったら,簡単な編集用の関数を作ったり,計算機代わりに使ってるだけだったりします。せっかく手軽な Common Lisp の処理系があるのに,使わないのはもったいないので,ちと読んでみました。

入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算
新納 浩幸
毎日コミュニケーションズ
売り上げランキング: 323172
おすすめ度の平均: 2.5
2 マクロを学習したいならお勧めできません
3 ごく簡単な手引書

Amazon の書評では散々な評価ですけど,取っ掛かりとしてはそんなに悪くないと思います。なんつかですね,学生さんの知識自慢みたいな書評は,いつか来た道を見せつけられてる感じがして,トホホ……と思う。今もそうか。

ともあれ,本書の話をば。

Lisp というのは,プログラミング言語のひとつです。Emacs 系のエディタを使っていると,設定ファイルを書くのに必要だからお目にかかるんですけど(Common Lisp ではなく Emacs Lisp という毛色の違う Lisp なんだけれど),普通はプログラマでも目にすることも少ないないはず。一方,そのマイナーっぷりとは裏腹に(だからこそ?),熱狂的なファンもいるわけで,ま,ニッチな世界なわけです。本書は,そのニッチな Lisp を解説した書籍です。

本書の特徴は,なんといってもその処理系に xyzzy と GCL を取り上げていることです。Lisp は,Ruby ような優しい独裁者が主宰する言語と違って,言語仕様が ANSI で規格化されています。ただ,その割に処理系にはいろいろな種類が出ているもんで,(比較的)可搬性に乏しいことが難だったりします。xyzzy も ANSI Common Lisp のサブセットなので,ANSI Common Lisp そのものとは言えません。

んなもんで,解説書を選ぶにしても,まず,どの処理系を使った解説書なのかを確認する必要があるし,確認した後で自分のコンピュータにインストールできる処理系かを判断する必要もあります。その点,xyzzy は ANSI Common Lisp のサブセットなものの,導入しやすいのが最大の利点です。ついでに高機能なエディタを手に入れることもできる。『入門 xyzzy』の後に読む本としてもいいんじゃないかと思います。

入門xyzzy
入門xyzzy
posted with amazlet at 09.04.17
山本 泰三 日江 政弘 稲原 知久 佐野 匡俊
オーム社
売り上げランキング: 135322
おすすめ度の平均: 4.0
3 ちょっと欲張りすぎかも
5 ただの入門書にあらず
5 待望の本
4 ヒット

一方,プログラミング言語の解説書としてみると,内容が薄いのは否めません。ただ,これも,Lisp に初めて触れる向きにはこのくらいがちょうどいいんじゃないかと思います。

他の手続き型の LL と違って,Common Lisp は関数型のプログラミング言語と言われていて,Common Lisp を扱うということは,関数型言語のキモを身に付けることでもあります。で,この関数型言語の発想は,Ruby や Perl のそれと根本的に異なる。もちろん,Ruby も最近のはλ式(関数型言語の重要な概念)を扱うことができるし,C++ だって,boost::mpl でλ式を扱うことができます。けど,それはλ式「も」使えるというだけの話。Lisp の場合,λ式こそが言語仕様のキモなので,これを身に付けないとお話になりません。

現在普及している手続き型言語の使い方を覚える場合,ひとつの言語を使えれば他の言語身に付けるのもそれほど難しくありません。Perl を知ってる人が Ruby を始めるとしても,「条件式をつくるには……」とか「繰り返しの構文は……」みたいな具合に,すでに知ってる言語と対照させながら身に付けることができるからです。けど,Lisp の関数言語なお作法は,そういうもんではないわけで,ループを作るにしても再帰を普通に使ったりします。というわけで,Lisp を始めるにはある意味,最初からプログラミングを始めるつもりで,取り組まないといけません。

本書は,そゆ Lisp の特殊性からすると,ちょうどいい導入本になるんじゃないかと思います。導入本というのは,Lisp の導入本であるとともに,関数型言語の導入本とも言えるというわけ。逆に,まさか,Lisp で業務システムを構築したり大規模で複雑な演算を行う人はいない(ひいき目に見ても少ない)でしょうから,大部分の人には多分本書で十分なんだと思ったりもします。xyzzy の設定ファイルをいぢるくらいなら,本書の内容で十分満足できる。

ひとつ注意しなくちゃいけないのは,C言語や基本的なアルゴリズムについて,ある程度の知識がある人を想定している(ように思える)点です。クイックソートを Lisp で作る箇所とかあるけれども,「クイックソートって何ですか?」という向きには,簡単な解説があるだけなので,ちとしんどいかもしれません。また,お題が数学寄りなので,やってて「つまんね」と思う方もいるかもしれない。高階関数あたりは割と大切だから知ってた方がいいものの,「最大公約数を求める」とか「素数列挙」とかいったお題は実用的なお題じゃありません。ここら辺は割り切って,さらっと流すのが賢いのかも。

また,本書の特徴として,C言語と比較している点についても特徴的です。ただ,そこにいわゆる「美しい」は,あくまでも学者的・学生的な意味での美しさであって,実務的に実用的な美しさではないんだと思う。

例えばそれは,以下のようなコード。K&R の最初に出てくるコードでもあるんですけど,while-文の条件式を「美しい」と見るか,ということです。

#include <stdio.h>

int
main(int argc, char* argv[]) {
    int c;
    while((c = getchar()) != EOF) {
        putchar((char)c);
    }
    return 0;
}

関数型言語の雰囲気は,こんな感じなんですけれど,C の実用的な書き方ではなかったりします。どうしてかというと,デバッガでステップ実行したときに,一度に複数の命令が実行されてしまうから。何か不具合があったときに,文の中のどの式にバグがあるのか,追いかけるのが難しくなってしまいます。ま,こゆのは好みの問題でもあるので,ここで深入りはしませんけど,本書にいわゆる「美しさ」というのは,そういうものだということ。

ともあれ,価格と分量のお手軽さの割には,関数型言語の醍醐味を垣間見ることができる良書だと思います。おすすめ。

Trackback
Trackback URL:
[2009年05月02日 16:17] もぼなもな書房  Rubyプログラミング入門 from もぼなもな書房
Rubyプログラミング入門 タイトルの通り、入門用としては押さえるところを押さえていると思われます。... [more]
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN