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

解決策は非常に簡単でした。私の本当の問題は、マクロの mi 引数シンボルを文字列に変換するにはどうすればよいかということでした。

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

つまり、シンボル foo を "FOO" に変換します。そのために、シンボル名関数を使用しました

于 2013-04-24T15:33:03.863 に答える
0

これはおそらくあなたがやりたいことです:

(defmacro static-string (func &rest characters)
  `(,func ,(coerce characters 'string)))

実行時に文字列定数を作成する代わりに、いくつかの文字列定数を定義する必要がある場合は、おそらく理にかなっています...

そして、これがあなたが現在の結果に到達できると私が考えることができる唯一の方法です:

(defmacro quote-symbol-quote (func symbol)
  (list func #\" symbol #\"))

Stackoverflow の強調表示は誤解を招きます。結果として得られるのは、引用符、記号、および引用符の 3 つの引数で呼び出される関数foo-transformed-arg-nameです。

于 2013-04-23T19:39:57.917 に答える