【发布时间】:2017-12-19 10:14:18
【问题描述】:
(defmacro foo (x)
`(defun ,xt ()
(format t "hullo")))
(foo bar)
不会定义函数bart,因为,xt 被读取为变量xt,而不是变量x 加上t。但是有没有办法通过提供参数bar 来获取函数bart?
【问题讨论】:
标签: macros common-lisp variable-expansion
(defmacro foo (x)
`(defun ,xt ()
(format t "hullo")))
(foo bar)
不会定义函数bart,因为,xt 被读取为变量xt,而不是变量x 加上t。但是有没有办法通过提供参数bar 来获取函数bart?
【问题讨论】:
标签: macros common-lisp variable-expansion
你需要创建函数名(此时是字符串),然后将其转换为符号,例如:
(defmacro foo (x)
`(defun ,(intern (format nil "~aT" x)) ()
(format t "hullo")))
然后
? (foo bar)
BART
? (bart)
hullo
NIL
【讨论】: