<br>Yes, in my non-Racket-expert view, the core issue is certainly interactions between toplevel and the module system.  It seems unfortunate at best that we have:<br><br>Welcome to DrRacket, version 5.3 [3m].<br>Language: racket; memory limit: 512 MB.<br>
&gt; (define (range lo hi)<br>     (print &quot;hi&quot;)<br>     (if (&gt; lo hi) null (cons lo (range (+ 1 lo) hi))))<br>&gt; (range 3 7)<br>&quot;hi&quot;&#39;(3 4 5 6)<br><br>but:<br><br>Welcome to DrRacket, version 5.3 [3m].<br>
Language: racket; memory limit: 512 MB.<br>&gt; (define range 0)<br>&gt; (define (range lo hi)<br>     (print &quot;hi&quot;)<br>     (if (&gt; lo hi) null (cons lo (range (+ 1 lo) hi))))<br>&gt; (range 3 7)<br>&quot;hi&quot;&quot;hi&quot;&quot;hi&quot;&quot;hi&quot;&quot;hi&quot;&quot;hi&quot;&#39;(3 4 5 6 7)<br>
&gt; <br><br>I&#39;m sure this is an old topic, but would there be fewer gotchas if the REPL were in its own module, importing whatever was defined by the definitions window?<br><br>(I note that range was not defined in Racket 5.2, but we seem to have the same behavior with map, so this is not a new behavior with respect to the top-level.)<br>
<br>--Dan<br><br><div class="gmail_quote">On Tue, Oct 23, 2012 at 10:02 AM, Jens Axel Søgaard <span dir="ltr">&lt;<a href="mailto:jensaxel@soegaard.net" target="_blank">jensaxel@soegaard.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I forgot to add one rationale for having a context dependent meaning<br>
of define-values. With the current setup, you can write<br>
<br>
(module foo some-lang<br>
   (define (range ...) ...))<br>
<br>
without worrying about whether range is defined in some-lang or not.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Jens Axel Søgaard<br>
<br>
<br>
2012/10/23 Jens Axel Søgaard &lt;<a href="mailto:jensaxel@soegaard.net">jensaxel@soegaard.net</a>&gt;:<br>
</font></span><div class="HOEnZb"><div class="h5">&gt; 2012/10/23 Dan Grossman &lt;<a href="mailto:djg@cs.washington.edu">djg@cs.washington.edu</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt; Thanks, David.  I would be interested in someone walking through how this<br>
&gt;&gt; behavior arises -- as well as the design issue regarding the &quot;hopeless<br>
&gt;&gt; top-level&quot;: Is this the least-bad option available or an unexpected<br>
&gt;&gt; consequence?<br>
&gt;&gt;<br>
&gt;&gt; --Dan<br>
&gt;<br>
&gt; The expansion in the repl is:<br>
&gt;<br>
&gt;&gt; (syntax-&gt;datum<br>
&gt;    (expand<br>
&gt;     &#39;(define (range lo)<br>
&gt;        (lambda (hi) (if (&gt; lo hi) null (cons lo ((range (+ 1 lo)) hi)))))))<br>
&gt;<br>
&gt; &#39;(define-values<br>
&gt;   (range)<br>
&gt;   (lambda (lo)<br>
&gt;      (lambda (hi)<br>
&gt;         (if (#%app &gt; lo hi)<br>
&gt;             null<br>
&gt;              (#%app cons lo (#%app (#%app range (#%app + &#39;1 lo)) hi))))))<br>
&gt;<br>
&gt; The tricky thing here is that the meaning of a define-values form is<br>
&gt; dependent on context:<br>
&gt;<br>
&gt;     In an internal-definition context (see Internal Definitions), a<br>
&gt; define-values form<br>
&gt;     introduces local bindings.<br>
&gt;<br>
&gt;    At the top level, the top-level binding for each id is created<br>
&gt; after evaluating expr,<br>
&gt;    if it does not exist already, and the top-level mapping of each id<br>
&gt;    (in the namespace linked with the compiled definition) is set to the binding<br>
&gt;    at the same time.<br>
&gt;<br>
&gt; An the documentation on an internal-definition context says:<br>
&gt;<br>
&gt;     A define-values form: The lexical context of all syntax objects<br>
&gt; for the body<br>
&gt;     sequence is immediately enriched with bindings for the define-values form.<br>
&gt;<br>
&gt; <a href="http://docs.racket-lang.org/reference/define.html?q=define-values&amp;q=repl#(form._((quote._~23~25kernel)._define-values))" target="_blank">http://docs.racket-lang.org/reference/define.html?q=define-values&amp;q=repl#(form._((quote._~23~25kernel)._define-values))</a><br>

&gt;<br>
&gt; --<br>
&gt; Jens Axel Søgaard<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; --<br>
&gt; Jens Axel Søgaard<br>
<br>
<br>
<br>
--<br>
--<br>
Jens Axel Søgaard<br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br>