On Sun, 13 Sep 2009, Brian Mastenbrook wrote: > On Sep 13, 2009, at 2:59 PM, Andre van Tonder wrote: > >> 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). > > No. The R5RS requires this to return 2, as does the R6RS. The scope of > internal definitions has nothing to do with one-pass versus two-pass. In both > systems, the example that Aziz gave must return 2. Any system in which it > doesn't is broken.
Any system that returns 2 cannot be 1-pass. If R5RS requires this to give 2, then we have to conclude that R5RS requires 2-pass for internal definitions. Andre _______________________________________________ r6rs-discuss mailing list [email protected] http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss
