[r6rs-discuss] [Formal] Formal semantics should not contain complicating optimizations

AndrevanTonder andre at het.brown.edu
Fri Mar 16 11:12:01 EDT 2007


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 <andre at het.brown.edu> 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
>> 
>> 
>> 
>
>



More information about the r6rs-discuss mailing list