<div dir="ltr"><div style>Suppose x-is-foo.rkt is this:</div><div style><br></div><div style><div>(module x-is-foo racket</div><div>  (define x &#39;foo)</div><div>  (provide x))</div><div><br></div><div style>If you open another file and try this:</div>
<div style><div><br></div><div>(require &quot;x-is-foo.rkt&quot;)</div><div>(define x &#39;bar)</div><div><br></div><div style>You&#39;lll get a &quot;identifier already imported&quot; error. OK, that much I understand.</div>
<div style><br></div><div style>Here&#39;s the question. When you do this:</div><div style><br></div><div style><div>(parameterize ([current-namespace (make-base-empty-namespace)])</div><div>  (namespace-require &#39;racket)</div>
<div>  (namespace-require &quot;x-is-foo.rkt&quot;)</div><div>  (namespace-set-variable-value! &#39;x &#39;bar)         </div><div>  (eval &#39;(print x) (current-namespace)))</div><div><br></div><div style>This time, you get &#39;foo. Why &#39;foo? Why not another &quot;identifier already imported&quot; error?</div>
<div style><br></div><div style>I assume I&#39;m missing a subtlety of how the namespace environment is different. But according to the docs, both namespace-require and namespace-set-variable-value! affect the top-level environment of the namespace. So I don&#39;t see why the require is silently overriding the set-variable-value, rather than causing a conflict.</div>
<div style><br></div><div style>It&#39;s not a sequencing issue, because if you swap the two lines:</div><div style><br></div><div style><div>(parameterize ([current-namespace (make-base-empty-namespace)])</div><div>  (namespace-require &#39;racket)</div>
<div>  (namespace-set-variable-value! &#39;x &#39;bar)         </div><div>  (namespace-require &quot;x-is-foo.rkt&quot;)</div><div>  (eval &#39;(print x) (current-namespace)))</div><div><br></div><div style>You still get &#39;foo.</div>
</div><div style><br></div><div style>Only if you remove the require line:</div><div style><br></div><div style><div>(parameterize ([current-namespace (make-base-empty-namespace)])</div><div>  (namespace-require &#39;racket)</div>
<div>  (namespace-set-variable-value! &#39;x &#39;bar)         <br></div><div>  (eval &#39;(print x) (current-namespace)))</div><div><br></div><div style>Do you get &#39;bar.</div><div style><br></div><div style><br></div>
</div></div></div></div></div>