マクロについてメモ
Lispのマクロについて、書籍の抜粋メモ。
マクロの使いドコロ
On Lisp 8.1 他の手段では不可能なとき の項より
マクロにできて関数にできないことは2つある:
- まずマクロは引数の評価を制御(または抑制)できること
- また呼び出し側のコンテキスト内へ直に展開されること
だ。結局マクロが必要なアプリケーションには、これらの性質の片方または両方が必要なのだ。
LOL 2.3 制御構造 の項より
「関数ではできない時だけマクロを使う」という言葉は、
- ある引数を評価しないか
- 違う順番で評価をするか
- 二度以上評価する
ような定義をしたければ、どんな定義でもマクロを使う必要があるだろう、
という意味である。
LOL 2.4 自由変数 の項より
事実、いったんそれに慣れてしまうと、できる限りいつでもマクロを書いてレキシカルコンテキストを拡張しようとし、関数を使うのは引数を評価する必要がある時か、単に怖気づいたか、新しいレキシカルコンテキストが欲しい時だけになるLispプログラマもいるくらいである。
LOL 2.7 構文の二重性 の項より
この二重構文を使えば、単一で共通のインタフェースを持ちながら、ダイナミックコンテキストとレキシカルコンテキストの両方で便利な展開を行うマクロを書ける。
On Lisp 8.3 マクロの応用例 の項より
マクロが一般にどう使われるかについては、「主に構文変換に使われる」と言えば一番近いだろう。
LOL 4.4 macroletを使ったコードウォーク
macroletはCOMMON LISPのコードウォーカーとコミュニケーションするためのものであり、マクロの展開がいつ行われるかについては、コンパイル済み関数の実行時より前に完了することだけが保証される。
マクロの使い方
参考文献
- 作者: ポールグレアム,野田開,Paul Graham
- 出版社/メーカー: オーム社
- 発売日: 2007/03/01
- メディア: 単行本
- 購入: 10人 クリック: 146回
- この商品を含むブログ (128件) を見る
- 作者: ダグホイト,Doug Hoyte,タイムインターメディアHOPプロジェクト
- 出版社/メーカー: エスアイビーアクセス
- 発売日: 2009/07/01
- メディア: 単行本
- 購入: 9人 クリック: 73回
- この商品を含むブログ (28件) を見る