我有一种情况,我想做一些事情......
(define (def a b)
(store a b) ; store the definition of 'a' somewhere
(define-global a b)) ; also define 'a' so that its definition
; is accessible later in the program
这有可能吗?据我所知 define-global
不存在,因此过程中的 define
语句仅适用于本地环境。
这是为了在方案中为嵌入式 DSL 创建“def”过程,因此除了进行定义之外,我还需要将定义存储在我自己的符号表中。最终我想“拦截”符号查找来应用我自己的转换,返回符号查找的表达式而不是实际执行它。
我正在使用 Gambit-C 方案。
谢谢。
最佳答案
不,至少没有任何 Gambit 特定的低级钩子(Hook)。但这是有充分理由的:您的建议将导致无法进行有效的编译,因为绑定(bind)可能随时更改。
如果您的目标是实现 DSL,那么将值保留在您自己的表中,并在 DSL 中实现变量查找的代码中进行查找非常有意义。此外,它自然会引导您实现 DSL 存在于其自己的世界中的实现,与实现它的代码分开。 (例如,如果您有上述情况,那么当 DSL 内的代码定义一个名为 def
的变量时,您期望会发生什么?)
关于scheme - 我可以在Scheme 的过程内部定义一个全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1894610/