Lisp本積読解消: LISPマシン・プログラミング技法 3.6 マクロ — #:g1

Posted 2017-02-19 18:01:00 GMT

今回は、LISPマシン・プログラミング技法のマクロ解説を読む。

2014年にAmazonで100円で購入。
この本は、Symbolics Lispマシンの入門書だが、Lispプログラミングについても、そこそこの分量を割いている。

3.6 マクロ

簡単にソースコードの変換の仕組みであることが説明され、マクロの利用が有効な手段となる事例として、

  1. プログラムが長い
  2. 入力がめんどくさい
  3. 間違えやすい
  4. いろんなところで用いられる

位を挙げている。

ざっくり言えば複雑さを制御する手段として説明したいらしい。

詳細については、Symbolics Common Lisp: Language Concept “Macros” を参照せよとあり、後は簡単にマクロ展開のツールの説明がされるのみ

マクロ展開のツールの説明

Lisp Listener(REPL)では、Show Expanded Lisp Codeコマンド、関数としては、(scl:mexp)が紹介されている。

Show Expanded Lisp Codeというのは非常に長いコマンドだが、実際には、s e l位を打ち込めば補完してくれるので、呼び出し自体はそれ程面倒でもない。
とはいえ、Listenerに直接入力することはあまりないと思う。

(scl:mexp)の方は、実行するとCommon Lispのinspectのような感じで入力を待つので、そこにフォームを入力する。

一番手軽なのは、やはりZmacsのコマンドで、Macro Expand Expression (c-sh-M)だろう。
SLIMEにも同様のコマンドがあるが、Lispマシンから受け継いできたコマンドともいえる。
マクロを再帰的に展開するには、Macro Expand Expression All (m-sh-M)を使う。

なお、GNU Emacsだとターミナル経由で利用されることが多かったためか、Shiftのあるなしは検出しないことが多いが、Symbolicsでは、Shiftも良く使い、マニュアルではshで表し、単体の文字は大文字で書かれる。

結び

良い機会なので、後でSymbolics Common Lisp: Language Conceptのマクロの箇所も読んでみようかなと思う。


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus