<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16414" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>Hi, my code is very wrong! It goes busted in&nbsp;non top level&nbsp;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&nbsp;two&nbsp;non top level identifiers&nbsp;reference the 
same var. Is there? I did not find any such tool in PLT-help.</DIV>
<DIV>Jos</DIV>
<DIV>&nbsp;</DIV>
<DIV>(((((lambda(x)((((((((x x)x)x)x)x)x)x)x))<BR>&nbsp;&nbsp;&nbsp; 
(lambda(x)(lambda(y)(x(x y)))))<BR>&nbsp;&nbsp; (lambda(x)(x)x))<BR>&nbsp; 
(lambda()(printf "Greetings, Jos~n"))))</DIV>
<DIV>&nbsp;</DIV>
<DIV>(module wrong mzscheme<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;(define-for-syntax var-table ())<BR>&nbsp;<BR>&nbsp;(define-for-syntax 
(lookup var)<BR>&nbsp; (let loop ((table var-table))<BR>&nbsp;&nbsp; (and (not 
(null? table))<BR>&nbsp;&nbsp;&nbsp; (let ((kar (car 
table)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (or (bound-identifier=? var kar) ; 
&lt;===&nbsp;WRONG</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (module-identifier=? var 
kar)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (loop (cdr 
table)))))))<BR>&nbsp;<BR>&nbsp;(define-for-syntax (check-table stx tag 
var)<BR>&nbsp; (if (lookup var)<BR>&nbsp;&nbsp; (printf "var found: ~a ~a (table 
length ~a)~n"<BR>&nbsp;&nbsp;&nbsp; (syntax-object-&gt;datum 
var)<BR>&nbsp;&nbsp;&nbsp; (syntax-object-&gt;datum tag)<BR>&nbsp;&nbsp;&nbsp; 
(length var-table))<BR>&nbsp;&nbsp; (begin<BR>&nbsp;&nbsp;&nbsp; (set! var-table 
(cons var var-table))<BR>&nbsp;&nbsp;&nbsp; (printf "var added: ~a ~a (table 
length ~a)~n"<BR>&nbsp;&nbsp;&nbsp;&nbsp; (syntax-object-&gt;datum 
var)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (syntax-object-&gt;datum 
tag)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (length var-table)))))<BR>&nbsp;&nbsp; 
<BR>&nbsp;(define-syntax (def stx)<BR>&nbsp; (syntax-case stx ()<BR>&nbsp;&nbsp; 
((def tag var val)<BR>&nbsp;&nbsp;&nbsp; (begin<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
(check-table stx #'tag #'var)<BR>&nbsp;&nbsp;&nbsp;&nbsp; #'(define var 
val)))))<BR>&nbsp;<BR>&nbsp;(define-syntax (ref stx)<BR>&nbsp; (syntax-case stx 
()<BR>&nbsp;&nbsp; ((ref tag var)<BR>&nbsp;&nbsp;&nbsp; 
(begin<BR>&nbsp;&nbsp;&nbsp;&nbsp; (check-table stx #'tag 
#'var)<BR>&nbsp;&nbsp;&nbsp;&nbsp; #'var))))<BR>&nbsp;<BR>&nbsp;(provide def 
ref))</DIV>
<DIV>&nbsp;</DIV>
<DIV>(require wrong)</DIV>
<DIV>&nbsp;</DIV>
<DIV>(let ((a -1)) (def 1 a -2) (ref 2 a))<BR>(let ((a -3)) (def 3 a -4) (let () 
(ref 4 a)))</DIV>
<DIV>&nbsp;</DIV>
<DIV>; Produced output<BR>; Welcome to DrScheme, version 369.8-svn9mar2007 
[3m].<BR>; Language: Textual (MzScheme, includes R5RS) custom.<BR>; var added: a 
1 (table length 1)<BR>; var found: a 2 (table length 1)<BR>; -2<BR>; var added: 
a 3 (table length 2)<BR>; var added: a 4 (table length 3) ; added!!!<BR>; 
-4<BR>; &gt; <BR>; The reason is that in the context of ref 4 variable 'a' would 
bind</DIV>
<DIV>; differently from the context of ref 3.<BR>; This means that in a local 
context, the register-lookup fails if a</DIV>
<DIV>; reference is made to a struct-type defined outside this context.</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=gherson@snet.net href="mailto:gherson@snet.net">George Herson</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=jos.koot@telefonica.net 
  href="mailto:jos.koot@telefonica.net">jos koot</A> ; <A 
  title=jensaxel@soegaard.net href="mailto:jensaxel@soegaard.net">Jens Axel 
  Søgaard</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=plt-scheme@list.cs.brown.edu 
  href="mailto:plt-scheme@list.cs.brown.edu">plt-scheme@list.cs.brown.edu</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, March 12, 2007 8:16 
AM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [plt-scheme] Dot-notation 
  for structure field access</DIV>
  <DIV><BR></DIV>thanks for this work.&nbsp; I'm using hash tables at<BR>present 
  but this code will inform my Scheme if not my<BR>scheme.<BR>...<BR>george 
  <BR>...</BLOCKQUOTE></BODY></HTML>