It is where library bodies are said to expand to the equivalent of a letrec*
(in the expansion process section). Whatever else may happen in future versions to the specification of libraries/toplevel-programs, I would hope that their consistency with internal definitions be maintained in this regard. The letrec* in question would be

     (letrec* ((x (set! y 1))
               (y y))
       y)

This is illegal according to the specification of letrec*, which says
"One restriction on letrec* is very important: it must be possible to evaluate each <init> without assigning or referring to the value the corresponding <variable> or the <variable> of any of the bindings that follow it in <bindings>. If this restriction is violated, an exception with condition type &assertion is raised."

Andre

On Fri, 16 Mar 2007, Robby Findler wrote:

I went back and re-read the library section, but I can't find where
this is said to be illegal.

Can you explain yourself a little bit more, please?

Thanks,
Robby

On 3/16/07, AndrevanTonder <[EMAIL PROTECTED]> wrote:
A small issue: I have noticed that 10.9 addresses programs such as

   (define x (set! y 1))
   (define y 2)

This kind of thing is illegal in the current specification.

Andre






_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to