【发布时间】:2017-12-18 05:39:56
【问题描述】:
这可能是一个新手问题,但我正在尝试编写一个宏来检测标识符是否在宏扩展点被词法绑定,并相应地更改其输出。这在 R6RS Scheme 中是否可行,如果可以,如何实现?
为什么我想知道
我正在使用宏在 Chez Scheme 中编写一个玩具 Objective-C 绑定层,我最初的挑战是如何有效地处理 Objective-C 选择器。程序必须在运行时查询 Objective-C 运行时,以获取与每个选择器名称对应的实际 SEL 对象。程序中使用的选择器名称在扩展过程中将是静态已知的,并且很容易让我的宏插入该查询代码,但我想避免重复查询相同的选择器名称。
我对此的第一个想法是为绑定到SEL 外部对象的Scheme 定义制定一些命名约定。这样,我可以为每个唯一的选择器设置一个 (define),因此每个选择器都有一个运行时查询。这取决于我的宏能够检测到任何给定选择器的这些绑定,并在它们不存在时引入它们,因此是我的问题。
这个解决方案仍然不完美,因为我的宏可能会在内部范围内扩展,但这对我来说是最明显的。有没有更好的方法在扩展时“实习”表达式?
【问题讨论】:
标签: macros scheme r6rs chez-scheme