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-11-14

KMRCLを眺める (13) mac

| 23:21 | KMRCLを眺める (13) mac - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (13) mac - わだばLisperになる

今日は、KMRCLのmacros.lispの中からMACです。

アナフォリック・マクロシリーズも前回で終わりました。

今回のMACはマクロを展開して表示してくれる便利ユーティリティのようです。

使い方は、REPLなどで、

(mac (loop :for i :from 100 :downto 0))
;⇒ (BLOCK NIL
;    (LET ((I 100))
;      (DECLARE (TYPE (AND REAL NUMBER) I))
;      (SB-LOOP::LOOP-BODY NIL
;                          (NIL NIL (WHEN (< I '0) (GO SB-LOOP::END-LOOP))
;                           NIL)
;                          NIL
;                          (NIL (SB-LOOP::LOOP-REALLY-DESETQ I (1- I))
;                           (WHEN (< I '0) (GO SB-LOOP::END-LOOP)) NIL)
;                          NIL)))
;  

という感じでしょうか。

定義は、MACROEXPAND-1をした結果をCL標準のPPRINT(プリティ・プリント)で表示しているようです。

(defmacro mac (expr)
"Expand a macro"
  `(pprint (macroexpand-1 ',expr)))

REPLでMACROEXPAND-1を連発してるスタイルの方には便利かもしれません。

Slimeを使っている人はエディタバッファでslime-macroexpand-〜できるので不要ですね。