2008年1月6日日曜日

Chapter 7 Macros: Standard Control Constructs

前説

特になし。


WHEN and UNLESS


CL-USER> (defmacro my-when (condition &rest body)
`(if ,condition (progn ,@body)))
MY-WHEN
CL-USER> (macroexpand-1 '(my-when (> 3 2)
(+ 1 2)
(- 3 1)))
(IF (> 3 2) (PROGN (+ 1 2) (- 3 1)))
T

うーむ。",@"のスライシングは展開時に実施されるが、","による評価は実施されないのか。
いや、conditionを入力されたformに変更するのが","による評価か。


COND

特になし。


AND, OR, and NOT

特になし。


Looping

なんと。Lispの繰り返し構造は、goto 機構の上に全てマクロとして構築されている。(TAGBODY, GO)
DOがその上に構築されて、これが他の繰り返し方法の母。DOLIST、DOTIMESなどがあると。
で、LOOPは鬼子。ミニ言語でLISPっぽくないが、マクロのパワーを示すのにはよい例と。


DOLIST and DOTIMES

特になし。


DO

特になし。


The Mighty LOOP

Seasoned Lisper ではなく、DOの構文もさっき知ったばかりだが、

(do ((nums nil) (i 1 (1+ i)))
((> i 10) (nreverse nums))
(push i nums))

は普通に理解できる。
拡張LOOP自体は便利そう。

0 件のコメント: