[plt-scheme] Dot-notation for structure field access
Hi, my code is very wrong! It goes busted in non top level scopes (eg within let) This I experienced when trying to write syntaxes let-struct-type and let-struct-var. The reason is shown below. I dont know any method to find out whether or not two non top level identifiers reference the same var. Is there? I did not find any such tool in PLT-help.
Jos
(((((lambda(x)((((((((x x)x)x)x)x)x)x)x))
(lambda(x)(lambda(y)(x(x y)))))
(lambda(x)(x)x))
(lambda()(printf "Greetings, Jos~n"))))
(module wrong mzscheme
(define-for-syntax var-table ())
(define-for-syntax (lookup var)
(let loop ((table var-table))
(and (not (null? table))
(let ((kar (car table)))
(or (bound-identifier=? var kar) ; <=== WRONG
(module-identifier=? var kar)
(loop (cdr table)))))))
(define-for-syntax (check-table stx tag var)
(if (lookup var)
(printf "var found: ~a ~a (table length ~a)~n"
(syntax-object->datum var)
(syntax-object->datum tag)
(length var-table))
(begin
(set! var-table (cons var var-table))
(printf "var added: ~a ~a (table length ~a)~n"
(syntax-object->datum var)
(syntax-object->datum tag)
(length var-table)))))
(define-syntax (def stx)
(syntax-case stx ()
((def tag var val)
(begin
(check-table stx #'tag #'var)
#'(define var val)))))
(define-syntax (ref stx)
(syntax-case stx ()
((ref tag var)
(begin
(check-table stx #'tag #'var)
#'var))))
(provide def ref))
(require wrong)
(let ((a -1)) (def 1 a -2) (ref 2 a))
(let ((a -3)) (def 3 a -4) (let () (ref 4 a)))
; Produced output
; Welcome to DrScheme, version 369.8-svn9mar2007 [3m].
; Language: Textual (MzScheme, includes R5RS) custom.
; var added: a 1 (table length 1)
; var found: a 2 (table length 1)
; -2
; var added: a 3 (table length 2)
; var added: a 4 (table length 3) ; added!!!
; -4
; >
; The reason is that in the context of ref 4 variable 'a' would bind
; differently from the context of ref 3.
; This means that in a local context, the register-lookup fails if a
; reference is made to a struct-type defined outside this context.
----- Original Message -----
From: George Herson
To: jos koot ; Jens Axel Søgaard
Cc: plt-scheme at list.cs.brown.edu
Sent: Monday, March 12, 2007 8:16 AM
Subject: Re: [plt-scheme] Dot-notation for structure field access
thanks for this work. I'm using hash tables at
present but this code will inform my Scheme if not my
scheme.
...
george
...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20070312/39b4ca02/attachment.html>