<!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,</DIV>
<DIV>Inspired by the dot notation of Jens Axel Søgaard I tried to eliminate the 
need for define-accessor. See enclosure. However, I can't get rid of the error 
reported at the end of my trial, reading:</DIV>
<DIV>"compile: bad syntax; reference to top-level identifier is not allowed, 
because no #%top syntax transformer is bound in: acc85"</DIV>
<DIV>&nbsp;</DIV>
<DIV>Can anyone help me, please. Sorry that I don't send a stripped version of 
the problem. I have tried many stripped versions of my code, but in&nbsp;these 
the problem does not occur.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Greetings, Jos Koot</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>
<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=jensaxel@soegaard.net href="mailto:jensaxel@soegaard.net">Jens Axel 
  Søgaard</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=gherson@snet.net 
  href="mailto:gherson@snet.net">George Herson</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> Thursday, March 08, 2007 11:13 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> [plt-scheme] Dot-notation for 
  structure field access</DIV>
  <DIV><BR></DIV>George Herson skrev:<BR><BR>&gt; May not be the best approach 
  but I'm enjoying the<BR>&gt; compactness of the resulting code (which 
  allows<BR>&gt; conventional table-name.column-name notation in a<BR>&gt; 
  sql-like mini-language).<BR><BR>That remark sparked inspired me to play a 
  little<BR>with #top in order to get the following to work:<BR><BR>(require 
  dot)<BR>(define-struct color (r g b) (make-inspector))<BR><BR>(define-accessor 
  r color-r)<BR>(define-accessor g color-g)<BR>(define-accessor b 
  color-b)<BR><BR>(define a (make-color 1 2 3))<BR>a.r&nbsp; ; evaluates to 
  1<BR>a.g&nbsp; ; evaluates to 2<BR>a.b&nbsp; ; evaluates to 3<BR><BR><BR>The 
  entire program, which by no means is well-tested, is below.<BR><BR>/Jens 
  Axel<BR><BR>; Put the entire program in a buffer, choose "Pretty Big"<BR>; and 
  click "Run".<BR><BR>(module dot-helper mzscheme<BR>&nbsp;&nbsp; (provide dot 
  define-accessor)<BR><BR>&nbsp;&nbsp; 
  (begin-for-syntax<BR>&nbsp;&nbsp;&nbsp;&nbsp; (define accessors 
  (list)))<BR><BR>&nbsp;&nbsp; (require-for-syntax (prefix srfi: (lib "1.ss" 
  "srfi")))<BR>&nbsp;&nbsp; (define-syntax (dot stx)<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
  (syntax-case stx ()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(dot expr 
  accessor)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #`(#,(cdr (srfi:assoc 
  #'accessor accessors 
  module-identifier=?))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  expr)]))<BR><BR>&nbsp;&nbsp; (define-syntax (define-accessor 
  stx)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx 
  ()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(define-accessor name 
  getter)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! 
  accessors (cons (cons #'name 
  #'getter)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  accessors))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  #'(void))])))<BR><BR>(module dot mzscheme<BR>&nbsp;&nbsp; (provide (rename 
  my-top 
  #%top)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  define-accessor<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  dot)<BR><BR>&nbsp;&nbsp; (require (lib 
  "pregexp.ss")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  dot-helper)<BR><BR>&nbsp;&nbsp; (define-for-syntax (contains-dot? 
  sym)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (member #\. 
  (string-&gt;list<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (symbol-&gt;string sym))))<BR><BR>&nbsp;&nbsp; (define-for-syntax 
  (split-at-dot sym)<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
  (cond<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(regexp-match 
  #rx"^([^.]*)\\.([^.]*)$" (symbol-&gt;string 
  sym))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt;(lambda 
  (result)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (values (string-&gt;symbol (list-ref result 
  1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (string-&gt;symbol (list-ref result 
  2))))]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [else #f]))<BR><BR>&nbsp;&nbsp; 
  (define-syntax (my-top stx)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx 
  ()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(_ . 
  name)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and (identifier? 
  #'name)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (contains-dot? (syntax-e 
  #'name)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let-values ([(before 
  after)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (split-at-dot (syntax-e 
  #'name))])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (with-syntax ([var (datum-&gt;syntax-object #'stx 
  before)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [acc (datum-&gt;syntax-object #'stx 
  after)])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  #'(dot var acc)))]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(_ . 
  name)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #'(#%top . 
  name)])))<BR><BR><BR><BR>(require dot)<BR>(define-struct color (r g b) 
  (make-inspector))<BR><BR>(define-accessor r color-r)<BR>(define-accessor g 
  color-g)<BR>(define-accessor b color-b)<BR><BR>(define a (make-color 1 2 
  3))<BR>a.r<BR>a.g<BR>a.b<BR><BR>_________________________________________________<BR>&nbsp; 
  For list-related administrative tasks:<BR>&nbsp; <A 
  href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</A><BR></BLOCKQUOTE></BODY></HTML>