如何在scheme中定义子环境?
我只是在用Scheme(麻省理工学院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
(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
,后者将不再求值