<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ah thanks for the link, Matthew. Initially it seemed to me that R5RS
requires interaction-environment to be defined such that (eval (quote
&lt;expr&gt;) (interaction-environment)) is always equivalent to just
&lt;expr&gt;. However, the explanation in the PLT documentation
convinced me this may not be a good requirement or even be impossible
in general.<br>
<br>
Bas<br>
<br>
<br>
<br>
Matthew Flatt wrote:
<blockquote cite="mid:20081107134227.77B936500AF@mail-svr1.cs.utah.edu"
 type="cite">
  <pre wrap="">At Fri, 07 Nov 2008 09:14:09 +0100, Bas Steunebrink wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">I was a bit puzzled when I tried the following code in DrScheme:

(define x 0)
(let ((x 1))
    (eval '(set! x 2) (interaction-environment))
    x)
x

When running this in R5RS mode, it outputs 1 and then 2, while I would 
expect 2 and then 0. About interaction-environment, R5RS states that 
"The intent is that this procedure will return the environment in which 
the implementation would evaluate expressions dynamically typed by the 
user". 
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Although R5RS leaves the details to implementations, I believe the
intent behind the R5RS description is that `interaction-environment'
mimics a top-level read-eval-print loop. (All R5RS implementations that
I know implement it that way.)

  </pre>
  <blockquote type="cite">
    <pre wrap="">So I expected the set! expression to work on the local x 
variable, while PLT appears to take the top-level one. What do you think?
    </pre>
  </blockquote>
  <pre wrap=""><!---->
See also

  <a class="moz-txt-link-freetext" href="http://docs.plt-scheme.org/guide/eval.html#(part._.Local_.Scopes)">http://docs.plt-scheme.org/guide/eval.html#(part._.Local_.Scopes)</a>

That explanation is specific to PLT Scheme, and it relies on a default
second argument to `eval' that is essentially
`(interaction-environment)'. But `eval' in a typical Scheme behaves the
way for the same reason.


Matthew

  </pre>
</blockquote>
<br>
<pre class="moz-signature" cols="72">-- 
Bas Steunebrink
Intelligent Systems Group
Utrecht University
P.O. Box 80.089
3508TB Utrecht
The Netherlands
Tel: +31 (30) 253 2993</pre>
</body>
</html>