今後の R7RS スキーム標準 (スモール ランゲージ)の現在のドラフトを読みましたが、トップレベル バインディングの再定義がエラーにならない条件がわかりません。
定義または設定が可能だと思います!プログラムのトップレベルで 2 回目に導入されたバインディング。しかし、外部ライブラリからインポートされたバインディングについてはどうでしょうか? これらのバインディングを標準でオーバーライドすることは可能ですか?
レポートの 26/27 ページには、次のように書かれています。
プログラムの最上位には、インポート宣言が含まれる場合もあります。ライブラリ宣言では、同じ識別子を異なるバインディングで複数回インポートしたり、define、define-syntax、または set! を使用してインポートされたバインディングを再定義または変更したりすると、エラーになります。ただし、REPL はこれらのアクションを許可する必要があります。
再定義は、インポートされたバインディングのライブラリで発生した場合にのみエラーになるということですか?
コンパイラが+がまだ組み込みの追加を意味するのか、それとも他のユーザー指定のエラーなのかがわからない場合、コンパイラによる最適化を禁止することを理解しています。しかし、この観点からすると、ライブラリ レベルでの再バインドの禁止を制限することは意味がありません。プログラムにインポートされたバインディングに対しても (少なくとも) 意味がある場合です。
PS: これは計画プログラムの環境に関するすべてなので、現在の環境を手に入れることができないため、環境は第一級市民ではないと言っているのは正しいですか? (これにより、コンパイルされたプログラムは、バインディングの選択された名前を忘れることができます。)