macros - R6RS方案的make-variable-transformer有什么好处?

标签 macros scheme

在查看 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/

相关文章:

macros - 错误 `cannot be named the same as a tuple variant` 是什么意思?

c - 使用宏有效获取结构成员

c++ - 为什么我需要宏的双层间接?

c - 读取寄存器的宏函数

当从列表中编辑 'car' 时,方案功能不起作用

function - 在语言层面, `ccall` 到底是什么?

macros - 学习 Scheme 宏的资源 : define-syntax and syntax-rules

scheme - 字符串拆分功能

vim - 使用 VIM 的编程方案(Racket) - 如何开始

lisp - 如何制作 Racket 阅读器宏以将一个字符的任何实例转换为另外两个字符?