如何在scheme中定义子环境?

问题描述 投票:0回答:2

我只是在使用Scheme(mit-scheme),并且我刚刚弄清楚如何更改环境,以便“+”成为“-”运算符的等效过程的符号。

示例

(environment-define user-initial-environment '+ -)
(eval (+ 3 2) user-initial-environment)
=> 1

我只是想知道是否有一种简单的方法来将环境作为变量处理,所以当我将环境输入到 eval 中时,就像这样

(eval <exp> user-initial-environment) 

我不必使用“用户初始环境”。所以我可以在不同的环境中“玩”一个函数。

(eval <exp> env) 

其中 env 是附加到我的变量“env”的一些预定义环境。

scheme mit-scheme
2个回答
3
投票

关于顶级环境的相关麻省理工学院计划文档页面可能具有指导意义——您可以扩展现有的顶级环境(使用

extend-top-level-environment
)或从头开始创建一个新的环境(使用
make-top-level-environment
)。

但是,为了评估除最简单的表达式之外的任何内容,扩展

system-global-environment
user-initial-environment
可能会有所帮助(参见 13.2:环境变量


0
投票

R7RS 有一个

(environment)
功能:

(环境列表1 ...)
eval 库程序
此过程返回一个环境说明符 从空环境开始然后得到结果 将每个列表(被视为导入集)导入其中。 (有关导入集的说明,请参阅第 5.6 节。) 由说明符表示的环境的绑定 是不可变的,环境本身也是如此。

R7RS 规格第 55 页

© www.soinside.com 2019 - 2024. All rights reserved.