macros - 球拍扩展了引用列表形式的宏
问题描述
我有一个宏
(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 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>"))
推荐阅读
- ssas - SSAS OLAP Cube - Sum 度量仅在存在键时有效
- node.js - 通过删除按钮将动态表行数据传递给模态对话框
- c - 我需要在程序中解决这两个问题。根据输入,我需要修复代码以产生所需的输出
- docker - 渲染 SLS 'base:docker.manager.first' 失败:Jinja 变量列表对象没有元素 0
- mysql - 使用续集关联时是否需要续集迁移文件?
- javascript - 爬升和附加嵌套对象/数组
- docker - 在 Windows 的 docker 上启动 Windows 容器时的“系统限制”
- r - 与州空间数据框不同,创建县空间数据框会生成具有 NA 数据的列
- python - 如何暂时忽略键盘敲击/禁用键盘?
- createjs - Createjs:用于性能优化的 Stage.update() 内部工作问题。它是在每个滴答声中发生,还是在每次被调用时发生?