0

我怎样才能得到类似的东西:

(my-macro name) => (foo "foo-transformed-arg-name")

我只得到

(foo \#" foo-transformed-arg-name \#")

如何避免宏输出中的 #"?

4

3 回答 3

2
(defmacro foo (sym)
  (symbol-name sym))

或者

(defmacro foo (sym)
  (string-downcase (symbol-name sym)))

我不明白你为什么需要这样的宏,但你会最清楚。

于 2013-04-25T11:39:15.963 回答
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和引号字符。

于 2013-04-23T19:39:57.917 回答
0

决议非常简单。我真正的问题是如何将宏的 mi 参数符号转换为字符串。

(my-macro foo) => (other-func "foo")

那就是将 sybol foo 转换为“FOO”。为此,我使用了符号名称功能

于 2013-04-24T15:33:03.863 回答