Common Lisp 宏变量扩展
Common Lisp macro variable expansion
(defmacro foo (x)
`(defun ,xt ()
(format t "hullo")))
(foo bar)
不会定义函数 bart
,因为 ,xt
被读取为变量 xt
而不是变量 x
加一个 t
。但是有没有办法通过提供参数 bar
?
来获得函数 bart
您需要创建函数名(然后是字符串),然后将其转换为符号,例如:
(defmacro foo (x)
`(defun ,(intern (format nil "~aT" x)) ()
(format t "hullo")))
然后
? (foo bar)
BART
? (bart)
hullo
NIL
(defmacro foo (x)
`(defun ,xt ()
(format t "hullo")))
(foo bar)
不会定义函数 bart
,因为 ,xt
被读取为变量 xt
而不是变量 x
加一个 t
。但是有没有办法通过提供参数 bar
?
bart
您需要创建函数名(然后是字符串),然后将其转换为符号,例如:
(defmacro foo (x)
`(defun ,(intern (format nil "~aT" x)) ()
(format t "hullo")))
然后
? (foo bar)
BART
? (bart)
hullo
NIL