【问题标题】:Common Lisp macro variable expansionCommon Lisp 宏变量扩展
【发布时间】: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


    【解决方案1】:

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

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

    然后

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

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多