Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-02-07

書評:Lispプログラミング入門 (KE養成講座)

| 09:59 | 書評:Lispプログラミング入門 (KE養成講座) - わだばLisperになる を含むブックマーク はてなブックマーク - 書評:Lispプログラミング入門 (KE養成講座) - わだばLisperになる

そういえば自分はこのブログに書評とか書いたことが無いことに気付きました。

考えてみるにLISP関係の本は絶版になることも多く、一体どんな本なのかがamazonでレビューされることも少ないと思うので、どんなものであれ書評があると少しは役に立つのかなと思えてきました。

ということで、昨日、図書館から借りた「Lispプログラミング入門 (KE養成講座)」を読み終えたので感想を書いてみます。

Lispプログラミング入門 (KE養成講座)

LISP処理系CLtL1 ※ANSI Common Lispではありません

著者の白川洋充氏は、70年代からLISPをのスタンフォード大でAI研究もされていた方のようで、CLについて考察が、それまでのLISPとの比較から語られていたりして面白いです。

また、内容が現在の一般的な入門書からするとちょっと変っていて、アレイについて:displaced-to とかの使い方がそれなりに詳しく解説されていたり、継続渡しの解説(関数を渡すのではなくラムダ式を組み立ててゆく方式)があったり、それを利用して、探索、バックトラッキングの説明へと続いたりします。

面白かったところ

あまり本文とは関係のないところなのですが、setfにapplyを適用できない代わりの方法として、setfでapplyを使う方法が紹介されていました。

(let ((a #2a((1 2 3) (4 5 6) (7 8 9)))
      (pos '(1 1)))
  (setf (apply #'aref a pos) 'foo)
  a)
;=> #2A((1 2 3) (4 FOO 6) (7 8 9))

なるほど、これは知りませんでした。

そもそもの発端を考えると、setfにapplyを適用したかったということなのですが、ANSI Common Lispだと

(let ((a #2a((1 2 3) (4 5 6) (7 8 9)))
      (pos '(1 1)))
  (apply #'(setf aref) 'foo a pos)
  a)
;=> #2A((1 2 3) (4 FOO 6) (7 8 9))

とも書けますね。しかし、上のものの方が分かり易いと思います。

それと、まったくどうでも良いところなのですが、本著作中では、LAMBDAの引数に、Uや、Vが使われています。

(lambda (u v) (list u v ..))

どういう由来なのかは分からないのですが、昔のコードを眺めると、MITのLISPだと、XとかYなのですが、スタンフォードのLISPだと、UとかVなんですよね。

そんなところにスタンフォード大の香りを感じました(笑)

絶版ですが、ヤフオクや古本屋で見かけたら保護したい本です。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20090207