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