📌

2024年のCommon Lispの学習本はこれだ!

2020/09/18に公開

もともとQiitaで書いていた記事ですが、Qiitaを退会したところすべて消えてしまいました。
あのまとめどこいったの?と訊ねられるので、Zennで復活

Lisp村では、参考書の議論は盛り上がりますが、ちょっとLispを齧っただけであまりコードを書いてない人でも、『やっぱOn Lispは必読だよ』などとお勧めしてきたりするので、話半分で流すのがベターです。

良いのか悪いのか、Common Lispは進化が停滞しているので20年前の古い本でも内容は、通用します。
実際、On Lispや、実用Common Lispは1990年頃の本です。

初級篇

  • 対話によるCommon Lisp入門 / 栗原 正仁

Common Lisp版のScheme手習い、みたいな本です。

ここでいう、初級というのは、プログラミング言語そのものも知らない場合も含みますが、知っている場合は、

  • 実践Common Lisp

位からが良いでしょう。
実践Common Lispは残念ながら国内では絶版になりましたが、古本で入手は容易です。内容もほとんど古くなっていません。

  • Land of Lisp

も良いと思います。

中級篇

Common Lispのクックブックです。
英語の本ですが知りたいレシピだけ小分けに読めます。
通して読めば、Common Lispの知識はかなり充実したものになるでしょう。
電子版はセールで$10以下で売られていることもあります。

これまでCommon Lispのコンディションシステムについてまとまった書籍は存在していませんでしたが、まさかの書籍出版。
英語の本ですが、ニッチすぎるので翻訳されることも期待できないでしょう(Let Over Lambdaの例はあるが……)
書籍の前半はCommon Lispの知識を前提としないような解説から始まりますが、後半部はANSI CL化されたKent Pitmanの参照実装を解説するようなところがあるのでので、実装コードをいじりながら理解していくことも可能でしょう。
なお、参照実装の解説があることからわかるように、Lispではありがちな『作って学ぶ』系の書籍といって良く、コンディションシステムの用例が豊富に載っているような本ではありません。

様々なアルゴリズムをANSI Common Lispで実装してみせる書籍です。中級以降の実際的なプログラムの書き方の手本として良いのではないでしょうか。

  • On Lisp
  • Let Over Lambda

マクロにフォーカスした本なので、まずCommon Lispが書けるようにならないと読めません。
Common Lispが書けない状態で読んでも、単にページを捲っただけになると思います。
まず、Common Lispを書けるようになりましょう。
On Lispは古いCommon Lispで書かれているので注意しましょう(文末参照)

他、

  • 実用Common Lisp
    古典AIをCommon Lispで学ぶという本ですが、Common Lispの教材としても優れていると評判です。
    2018年に原書がgithubで公開されました。
  • https://github.com/norvig/paip-lisp

実用Common Lispは古いCommon Lispで書かれているので注意しましょう(文末参照)

上級篇

邦訳されていない書籍で名著と呼ばれるもののどれか。The Art of the Metaobject Protoclなど。

リファレンス的に

Common Lisp第二版は古いCommon Lispで書かれているので注意しましょう(文末参照)

古いCommon Lispについて

Common Lispには大別して3つのバージョンがあります。
最新の規格はANSI INCITS 226-1994[S2008] Programming Language Common Lisp ですが、ANSI CLが成立するまでの中間報告書としてCommon Lisp the Language 2nd(CLtL2)があり、1984年に発表された初代Common Lispがあります。

現在使われている処理系は、ANSI CLですが、これが成立した1994年より前に出版された書籍では、中間報告書であるCLtL2の仕様を元に記述していることがあります。
代表的な所では、

  • On Lisp(原書1993)
  • 実用Common Lisp(原書1991)
  • Common Lisp第二版(原書1990)

等々1990年代初頭の書籍ですが、残念ながらこれらの書籍はANSI CL規格へ記述のアップデートは行なっていません。

CLtL2からANSI CLへの変換表があるので、上記書籍を読んでいてANSI CLで試そうと思ったら関数がなかった……場合にはこの表で確認してみると良いかもしれません


コメント

  • 2024年版へと改訂:Programming Algorithms in Lisp解説追加
  • 2023年版へと改訂:Programming Algorithms in Lisp解説追加
  • 2022年版へと改訂:The Common Lisp Condition Systemについて解説追加
  • 2020年版へと改訂:The Common Lisp Condition Systemについて記載
  • 2019年版へと改訂:変化なし。新しい学習書籍も出ていません。
  • 2018年版へと改訂:PAIP原書github公開につき利用上の注意を記載
  • 2017年版へと改訂:皆もっとCommon Lisp Recipes読んで欲しい
  • 2016年版へと改訂:
  • 2015年の内容と一緒です。現在はLet Over Lambdaが再販になったり、実用Common Lispが電子書籍化したりしています。

Discussion