如何在scheme中定义子环境?

如何在scheme中定义子环境?,scheme,mit-scheme,Scheme,Mit Scheme,我只是在用Scheme(麻省理工学院Scheme)进行黑客攻击,我刚刚发现了如何改变环境,使“+”成为“-”操作符等效过程的符号 范例 (environment-define user-initial-environment '+ -) (eval (+ 3 2) user-initial-environment) => 1 我只是想知道是否有一种简单的方法可以将环境作为变量来处理,所以当我将环境输入eval时,就像这样 (eval <exp> user-initial-en

我只是在用Scheme(麻省理工学院Scheme)进行黑客攻击,我刚刚发现了如何改变环境,使“+”成为“-”操作符等效过程的符号

范例

(environment-define user-initial-environment '+ -)
(eval (+ 3 2) user-initial-environment)
=> 1
我只是想知道是否有一种简单的方法可以将环境作为变量来处理,所以当我将环境输入eval时,就像这样

(eval <exp> user-initial-environment) 
(评估用户初始环境)
我不必使用“用户初始环境”。因此,我可以在不同的环境中“玩”一个函数

(eval <exp> env) 
(评估环境)

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

上的相关MIT方案文档页可能很有启发性——您可以扩展现有的顶级环境(使用
扩展顶级环境
),也可以从头创建一个新环境(使用
创建顶级环境


但是,对于除最简单的表达式以外的任何表达式,扩展
系统全局环境
用户初始环境
(cf)

可能会有帮助?我不认为有一个标准的方法来做这个谢谢,我找到了我的答案!谢谢你的记录!对于记录,我去了
(define env(make top level environment))
,然后去了
(environment define env'+-)
,然后
(eval'(+2)env)
返回了
0
(eval'(+2)用户初始环境)
返回了
4
。有趣的是,
(eval(+2)env)
返回了4,但mit scheme的“eval”要求您指定两个参数:要计算的表达式和环境!为什么他们不允许一个参数作为eval的输入,而当你输入第一个参数时,第二个参数显然是多余的。
eval
只是一个函数,所以实际上
(eval(+2)env)
->
(eval 4 env)
所以无论你通过什么环境,它都不会产生任何影响;表达式在当前环境中求值,其结果将传递给
eval
,后者将不再求值