我怎样才能得到类似的东西:
(my-macro name) => (foo "foo-transformed-arg-name")
我只获得了
(foo \#" foo-transformed-arg-name \#")
如何在宏输出中避免使用#“?
答案 0 :(得分:2)
(defmacro foo (sym)
(symbol-name sym))
或
(defmacro foo (sym)
(string-downcase (symbol-name sym)))
我不明白为什么你需要这样的宏,但你会最清楚。
答案 1 :(得分:0)
这可能是你想要做的:
(defmacro static-string (func &rest characters)
`(,func ,(coerce characters 'string)))
如果你需要定义一些字符串常量而不是在运行时创建它们,也许有意义......
这是我能想到你能够达到目前结果的唯一方法:
(defmacro quote-symbol-quote (func symbol)
(list func #\" symbol #\"))
Stackoverflow突出显示具有误导性。你在结果中得到的是一个用三个参数调用的函数:引号字符,符号foo-transformed-arg-name
和引号字符。
答案 2 :(得分:0)
分辨率非常简单。我真正的探索是如何将宏的mi参数符号转换为字符串。
(my-macro foo) => (other-func "foo")
这是将sybol foo转换为“FOO”。 为此,我使用符号名称功能