Common Lisp宏变量扩展

时间:2017-12-19 10:14:18

标签: macros common-lisp variable-expansion

(defmacro foo (x)
    `(defun ,xt ()
         (format t "hullo")))

(foo bar)

不会定义函数bart,因为,xt被读取为变量xt而不是变量x加上t。但有没有办法通过提供参数bart来获取函数bar

1 个答案:

答案 0 :(得分:3)

您需要创建函数名称(然后是字符串),然后将其转换为符号,例如:

(defmacro foo (x)
  `(defun ,(intern (format nil "~aT" x)) ()
     (format t "hullo")))

然后

? (foo bar)
BART
? (bart)
hullo
NIL