Lisp本積読解消: Common Lisp & Artificial Intelligence | Chap. 5 Macros — #:g1

Posted 2017-02-11 18:25:51 GMT

Lisp本を沢山積読してしまっている。折角なのでこの状況のメリットを考えてみたが、一つのトピックについて色々な本を串刺しに読むというのは積読ならではではないかなと思ったので、とりあえずマクロについて串刺しに読んでみようと思う。

この本について

Common Lisp & Artificial Intelligence / Patrick R. Harrison著は、2009年にAmazonで1円で購入。
Common Lispと人工知能というタイトルの本は沢山あるが、その中の一冊という感じ。
240頁程の内容のうち、Common Lispについては150頁程割いている。

Chap. 5 Macros

この本では、マクロの利用形態を5つに大別して解説しており、

  1. ばらつきと詳細を隠蔽し抽象化するため
  2. 文法を単純化するため
  3. 大域的な副作用フォームを作成するため
  4. 引数をクォートするため
  5. 効率的にコンパイルするため

の五つを軸に据え、それぞれに具体的な例を挙げて解説が進む。

解説する例題で、MACLISPで良く使われていたユーティリティをCommon Lispで再現する例が多いので、著者はMACLISPに親しんだ人なのかもしれない。

上記のうち、大域的な副作用フォームを作成する、というのは大域的というより、定義するフォームの外側に影響を及ぼす、という意味らしい。

マクロの解説の後、リーダーマクロの解説となるが、ここでもMACLISPのリード時マクロ展開#%を再現するような例を用いて解説している。

章の最後には問題が九つ程あるので解いてみたが、中々面白い問題かなと思った。

気になった所

マクロを作る際に問題になる変数のキャプチャ問題をFUNARG問題として解説しているところがちょっと気になった。
確かにFUNARGの変種と考えられるようなそうでもないような。
とはいえ、マクロは関数引数になるわけでもないしFUNARGとは無縁のような。

また、コード例の中のassertの構文が間違っている。


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus