Common Lisp宏变量扩展

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Common Lisp宏变量扩展相关的知识,希望对你有一定的参考价值。

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

(foo bar)

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

答案

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

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

然后

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

以上是关于Common Lisp宏变量扩展的主要内容,如果未能解决你的问题,请参考以下文章

Common Lisp宏中的词法绑定

将 Common Lisp 中的宏参数视为(区分大小写的)字符串

Common Lisp:将符号传递给宏

循环宏中的常见 Lisp 绑定

common-lisp:绑定和符号之间的区别

Lisp宏和scala宏有什么区别?