scheme - 我可以在Scheme 的过程内部定义一个全局变量吗?

标签 scheme

我有一种情况,我想做一些事情......

(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/

相关文章:

javascript - 理解 scheme 中的 fold 和 reduce 函数

javascript - 为什么此代码未定义但不是 2?

list - 如何仅使用基本操作递归反转列表?

scheme - 你如何找到MIT方案中发生错误的地方?

scheme - 如果事先不了解 Scheme 的底函数和舍入函数,如何完成 SICP 练习 1.45(计算 n 次方根函数)?

方案 - 从参数顺序运行两个过程?

scheme - 对象 ____ 不适用

scheme - 关于方案中的点 "."

方案,何时使用符号而不是字符串?

functional-programming - 无限斐波那契数列,只从列表中取 n,不使用突变?