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