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