lisp代码宏输出中的引号

时间:2013-04-23 18:48:58

标签: macros lisp common-lisp

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

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

我只获得了

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

如何在宏输出中避免使用#“?

3 个答案:

答案 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”。 为此,我使用符号名称功能