首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时可以覆盖(R7RS)方案中的顶级绑定?

何时可以覆盖(R7RS)方案中的顶级绑定?
EN

Stack Overflow用户
提问于 2012-09-09 12:25:02
回答 1查看 424关注 0票数 2

我已经阅读了当前的即将推出的R7RS计划标准(小型语言)草案,但我不明白在哪些条件下重新定义顶级绑定不是错误。

我想这是可能的定义或设置!第二次在程序的顶层引入的绑定。但是如何从外部库导入绑定呢?是否可以通过标准覆盖这些绑定?

报告第26/27页说:

程序的顶层也可能包括导入声明。在库声明中,使用不同的绑定多次导入相同的标识符,或者使用定义、定义-语法或set重新定义或修改导入的绑定,都是错误的。然而,REPL应该允许这些操作。

这是否意味着只有在导入绑定的库中发生重新定义时才是错误?

据我所知,如果编译器不知道(例如+)是否表示生成的附加错误或其他用户指定的错误,则禁止编译器进行优化。但是从这个角度来看,限制禁止在库级别上重新绑定是没有意义的,因为在程序中导入绑定(至少)也是有意义的。

P.S.:因为这都是关于一个计划项目的环境:我说的环境不是一流的公民,因为一个人无法控制当前的环境,对吗?(这反过来允许编译的程序忘记所选绑定的名称。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-03 18:00:48

一般原则是,在库中声明的绑定只能在同一个库中进行可移植的变异。如果一个库的绑定被导入到一个程序(或另一个库)中,那么它们就不能在那里发生变异。因此,如果程序导入(scheme base),标识符+总是引用标准的加法例程(当然,在一个由lambda, let, let*在本地隐藏的区域除外,或者您有什么)。

在REPL或由REPL执行的脚本中,此限制不适用。此外,实现还可以通过取消限制来扩展标准语言。

与当前全局环境最接近的是(interaction-environment)的结果,如果有,它表示REPL的可变环境。如果REPL未使用或不存在,则可以通过对与当前导入集相对应的参数调用environment来模拟当前但不可变的环境。R7RS和它的前身一样,没有任何词汇环境的表示形式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12339041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档