On Sun, 13 Sep 2009, John Cowan wrote:

> Abdulaziz Ghuloum scripsit:
>
>> I think one-pass gives you an approximation of let*-scoping
>> semantics while two-pass gives you recursive bindings.  For
>> example, the following expression
>>
>> (let-syntax ((f (syntax-rules () ((_) 1))))
>>    (let ()
>>      (define (g) (f))
>>      (define (f) 2)
>>      (g)))
>>
>> evaluates to 1 in one-pass since at the time (f) is expanded,
>> only the outer f is known.  In two-pass, it evaluates to 2
>> since (f) is expanded after the shadowing definition of f is
>> found.
>
> On my system, at least, Bigloo returns 1; PLT, Gauche, Chicken, scsh,
> Kawa, SISC, and Petite Chez all return 2; and Gambit and Guile return
> syntax errors.  None of these systems, AFAIK, are two-pass in the sense
> of R6RS.

For 1-pass systems, Gambit and Guile would be correct.  Bigloo is
in violation of lexical scope and is therefore incorrect.

Some of the systems that return 2 are definitely 2-pass in the sense of
R6RS (Petite, PLT, and other based on psyntax).

Andre

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

Reply via email to