球拍扩展引用列表形式的宏

racket expanding a macro which is in quoted list form

我有一个宏

(define-syntax-rule (with tag body)
    (string-append (format "<span class=\"~s\">" 'tag)
                    body
                    (format "</span>")))

> (display (with p "some text"))
<span class="p">some text</span>

这是想要的结果

如何“宏展开”然后计算列表'(with p "some text")?这是一个示例,当我阅读包含这些表单的文件并打算将它们全部展开时返回的内容。

eval 可行,但我知道那不是正确的方法。

我知道有许多可用的 html 模板解决方案 - 但这里的目标并不完全 HTML - 不要问! :)

提前致谢

Racket 没有这样的内置函数,但是添加它很简单:

(define (macroexpand form)
  (syntax->datum
     (expand-to-top-form
      form)))

示例:

> (macroexpand '(with p "some text"))
'(string-append (format "<span class=\"~s\">" 'p) "some text" (format "</span>"))