我已经阅读了即将发布的 R7RS 方案标准(小语言)的当前草案,但我不明白在什么情况下重新定义顶级绑定不是错误。
我想可以定义或设置!第二次在程序顶层引入的绑定。但是从外部库导入绑定呢?是否可以通过标准覆盖这些绑定?
在报告的第 26/27 页上,它说:
程序的顶层也可能包括导入声明。在库声明中,使用不同的绑定多次导入相同的标识符,或者使用 define、define-syntax 或 set! 重新定义或改变导入的绑定是错误的。但是,REPL 应该允许这些操作。
这是否意味着在导入绑定的库中确实发生重新定义时只是一个错误?
我知道如果编译器不知道说+是否仍然意味着内置添加或任何其他用户指定的错误,它会禁止编译器进行优化。但是从这个角度来看,在库级别限制禁止重新绑定是没有意义的,因为它(至少)对于程序中的导入绑定也是有意义的。
PS:因为这都是关于计划程序的环境:我是否正确地说环境不是一等公民,因为人们无法掌握当前的环境?(这反过来又允许编译的程序忘记选择的绑定名称。)