[Scheme-reports] DELAY AND FORCE Andre van Tonder (23 Apr 2011 22:20 UTC)
[Scheme-reports] Regions of imports unspecified Andre van Tonder (23 Apr 2011 22:31 UTC)
Re: [Scheme-reports] Regions of imports unspecified John Cowan (23 Apr 2011 22:43 UTC)
Re: [Scheme-reports] Regions of imports unspecified Alex Shinn (24 Apr 2011 01:59 UTC)
[Scheme-reports] What are regions of toplevel imports? Andre van Tonder (23 Apr 2011 23:41 UTC)
[Scheme-reports] Internal syntax definition order problem Andre van Tonder (23 Apr 2011 22:39 UTC)
[Scheme-reports] Mutable exports Andre van Tonder (23 Apr 2011 22:48 UTC)
Re: [Scheme-reports] Mutable exports Alex Shinn (24 Apr 2011 02:00 UTC)
[Scheme-reports] Internal definition shadowing problems Andre van Tonder (23 Apr 2011 23:19 UTC)
[Scheme-reports] Importing identifier more than once Andre van Tonder (23 Apr 2011 23:37 UTC)
Re: [Scheme-reports] Internal definition shadowing problems Aaron W. Hsu (12 May 2011 22:48 UTC)

Re: [Scheme-reports] Internal definition shadowing problems Aaron W. Hsu 12 May 2011 22:48 UTC

Filed ticket #178.

	Aaron W. Hsu

On Sat, 23 Apr 2011 19:18:35 -0400, Andre van Tonder <andre@het.brown.edu>
wrote:

> On p 19, some shadowing problems that would break lexical scope are
> declared to
> be errors.  However, I believe there are otehr examples that shold be
> errors
> that are not covered by the report.
>
> In R6RS a more general criterion was used - please see R6RS for details.
>
> Here is an example that does not violate the WG1 report but should be an
> error
> becasue it violates lexical scoping.  It does not violate the WG1
> criterion
> because the meaning of x is not needed to determine whether (foo x p )
> is a
> definition.
>
>     (let ((x #f))
>       (let-syntax ((foo (syntax-rules (x)
>                           ((_ x y) (define y 'outer))
>                           ((_ _ y) (define y 'inner)))))
>         (let ()
>           (foo x p)
>           (define x #f) ;; this should be an error because
>                         ;; it shadows the previous line where
>                         ;; x has already been used in its outer sense
>                         ;; during expansion
>           p)))
>
> Here is another example that WG1 allows but that would cause violation of
> lexical scoping, because the macro would be evaluated first and treat
> ... as a
> placeholder in a region where it is shadowed to be the variable bound to
> 1:
>
>     (let ()
>       (define-syntax list-macro
>         (syntax-rules ()
>           ((_ x ...) (list x ...))))
>       (define ... 1)    ;; This shadows ... in previously expanded macro
>                         ;; body and will be a violation of lexical
> scoping
>       (list-macro 1 2)) ;; if the last line evaluates to (1 2)
>
> OTOH, it is unclear to me if WG1 allows this or not.
>
>     (let ((x #f))
>       (let-syntax ((foo (syntax-rules (x)
>                           ((_ x y) (define y 'outer))
>                           ((_ _ y) (define y 'inner)))))
>         (let ()
>           (define x #f)
>           (foo x p)
>           p)))
>
> _______________________________________________
> Scheme-reports mailing list
> Scheme-reports@scheme-reports.org
> http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports

--
Programming is just another word for the lost art of thinking.

_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports