2010年3月7日日曜日

ラムダリストのwholeパラメータ

CommonLispのマクロ定義に、&wholeでパラメータを指定できる。

どうやら式そのものが束縛されるようだ。

(defmacro hoge (&whole call &optional (from 0) (to 10))
`(progn
(print ',call)
(format t "from:~A -> to:~A" ,from ,to)))

>(hoge 2 3)
(HOGE 2 3) from:2 -> to:3
>(macroexpand-1 '(hoge 2 3))
(PROGN (PRINT '(HOGE 2 3)) (FORMAT T "from:~A -> to:~A" 2 3))
>(hoge)
(HOGE) from:0 -> to:10
>(macroexpand-1 '(hoge))
(PROGN (PRINT '(HOGE)) (FORMAT T "from:~A -> to:~A" 0 10))

オプショナルパラメータなどがあっても、実際に呼び出す式に字面上現れないものは束縛されないようだ。

0 件のコメント:

コメントを投稿