Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 在R6RS方案中,是否有方法获取当前环境以用于评估?_Scheme_Eval_Environment_R6rs - Fatal编程技术网

Scheme 在R6RS方案中,是否有方法获取当前环境以用于评估?

Scheme 在R6RS方案中,是否有方法获取当前环境以用于评估?,scheme,eval,environment,r6rs,Scheme,Eval,Environment,R6rs,R6RS方案中是否有任何方法可以获取当前环境,然后将其作为第二个参数传递给eval 例如,下面的表达式返回9时,问号应该是什么 (let ((x 4) (y 5)) (eval '(+ x y) ???)) 从eval的角度来看,词汇变量从来都不是环境的一部分。因此,在您的示例中,eval无法触及词法变量x和y 更新:从Guile2.0.5开始,您可以使用,这将允许您的eval表达式使用局部(词汇)变量。但正如Eli所说,大多数方案实现都不支持这一点。不,R6R中没有这样的东西

R6RS方案中是否有任何方法可以获取当前环境,然后将其作为第二个参数传递给
eval

例如,下面的表达式返回9时,问号应该是什么

(let ((x 4)
      (y 5))
  (eval '(+ x y) ???))

eval
的角度来看,词汇变量从来都不是环境的一部分。因此,在您的示例中,
eval
无法触及词法变量
x
y


更新:从Guile2.0.5开始,您可以使用,这将允许您的eval表达式使用局部(词汇)变量。但正如Eli所说,大多数方案实现都不支持这一点。

不,R6R中没有这样的东西。一些罕见的实现可能支持类似的功能,但在绝大多数情况下(包括其他语言中的
eval
),这是无法实现的


这样做的原因很简单:它破坏了编译,因为它会导致基于本地名称区分两个函数,并且在某些情况下还会禁止简单的优化。例如,如果您可以为
填充一些内容,那么编译器将需要有两个绑定,即使可以对它们进行优化。在极少数可能的情况下,
中使用的任何内容(在某些语言中只是简单地使用
eval
)都会触发不同的编译,将已知绑定映射到它们的值。(在某些浏览器的JS代码中,确实提到了
eval
的一些奇怪行为,这实际上是同一个问题。)

@amoe内核编程语言使用这种eval。@artemonster:不,内核的eval与JS的eval非常不同。