【发布时间】:2017-01-17 05:00:11
【问题描述】:
我有:
(defmacro test (a b c)
`'(,a ,b ,c))
按预期运行(test apple banana cuba) 会得到(APPLE BANANA CUBA)。
如何让宏生成APPLEBANANACUBA?
我试过了:
(defmacro test (a b c)
`'(,a,b,c))
但运行(test ant bites chris) 仍然返回(ANT BITES CHRIS) 作为三个单独参数的列表。
我尝试了各种变化,但似乎都没有。喜欢这个:
(defmacro test (a b c)
`(apply #'concatenate 'symbol '(,a ,b ,c)))
显然,这会出错,因为 'symbol 不是连接的有效输出类型。
我确信这是我对宏如何工作的一些基本误解,并且有一种简单的方法可以做到这一点。我错过了什么?
【问题讨论】:
-
@JoshuaTaylor 尽管其他问题包含作为该问题答案的信息,但它包含在问题和答案中的许多其他信息中。您可以在该问题的评论中添加一个链接,说明那里有“更多”信息,但是将这两个问题称为“相同”(这是重复的意思)对任何可能从快速清晰的解决方案中受益的人都是一种伤害未来。真的由你决定,但请重新考虑。
标签: macros common-lisp