[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] Internal definition shadowing problems



Filed ticket #178.

	Aaron W. Hsu

On Sat, 23 Apr 2011 19:18:35 -0400, Andre van Tonder <andre@x>  
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@x
> 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@x
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports