首页 > 解决方案 > 球拍扩展了引用列表形式的宏

问题描述

我有一个宏

(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 - 不要问!:)

提前致谢

标签: macrosracketeval

解决方案


Racket doesn't have any built-in function like this, but it's simple to add it:

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

Example:

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

推荐阅读