在查看 R6RS 中的 syntax-case
部分时,我看到了关键字 make-variable-transformer
,它被描述为标识符宏 。给出的例子非常少,我并没有理解为什么它是必要的,或者什么用例需要它。事实证明,找到其使用的更多示例也很困难。据推测,它使得某种形式的语法转换成为可能,或者更优雅?
最佳答案
阅读后http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html#node_sec_12.3我的看法如下:
如果mac
是语法转换器
(mac foo (bar baz))
会将整个 s-expr 替换为转换结果,这可能会导致 (SOMETHING)
之类的结果,而 (foo mac bar)
将仅替换 mac
,从而生成 (foo SOMETHING bar)
。
通常 (set!mac 'foo)
会发出错误信号,似乎转换器不能出现在集合表达式的左侧,但如果 mac
是变量转换器 (set!mac 'foo)
会使用整个 s-expr 来调用 mac
。
我的直觉告诉我,如果您开始使用宏实现数据类型,这将会很有用。
关于macros - R6RS方案的make-variable-transformer有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325186/