<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Hello, is there a documented problem with (send e get-time-stamp) ? After upgrading from 5.1.2 to 5.2, suddenly all mouse events have a time-stamp of 0.<br><br>Thanks<br><br>Mathieu Paradis<br><br><div><div id="SkyDrivePlaceholder"></div>&gt; Date: Wed, 1 Feb 2012 10:11:55 -0700<br>&gt; From: ryan@cs.utah.edu<br>&gt; To: rac@ruediger-asche.de<br>&gt; CC: users@racket-lang.org<br>&gt; Subject: Re: [racket] macros in local namespaces?...<br>&gt; <br>&gt; On 02/01/2012 09:45 AM, Rüdiger Asche wrote:<br>&gt; &gt; Hi there,<br>&gt; &gt;<br>&gt; &gt; I'm trying to get a grip on macros. Here is a very simple Racket expression  (1):<br>&gt; &gt;<br>&gt; &gt; (letrec [(a 2)<br>&gt; &gt;          (b 3)<br>&gt; &gt;          (afn (lambda (x) (+ x a)))<br>&gt; &gt;          (bfn (lambda (x) (+ x b)))]<br>&gt; &gt;    (afn (bfn 2)))<br>&gt; &gt;<br>&gt; &gt; Now I need a syntactic abstraction for afn and bfn. The following will do in first approximation (2):<br>&gt; &gt;<br>&gt; &gt; (define-syntax-rule (absfn varname) (lambda (x) (+ x varname)))<br>&gt; &gt;<br>&gt; &gt; (letrec [(a 2)<br>&gt; &gt;          (b 3)<br>&gt; &gt;          (afn (absfn a))<br>&gt; &gt;          (bfn (absfn b))]<br>&gt; &gt;    (afn (bfn 2)))<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; However, it will fail due to scoping rules in the following example (3):<br>&gt; &gt;<br>&gt; &gt; (define-syntax-rule (absfn varname) (lambda (x) (+ (+ x localc) varname)))<br>&gt; &gt;<br>&gt; &gt; (letrec [(a 2)<br>&gt; &gt;          (b 3)<br>&gt; &gt;          (localc 4)<br>&gt; &gt;          (afn (absfn a))<br>&gt; &gt;          (bfn (absfn b))]<br>&gt; &gt;    (afn (bfn 2)))<br>&gt; &gt;<br>&gt; &gt; In other words, my syntactic extension absfn needs to be embedded in the namespace of the sorrounding expression (or as a "dumb" macro which simply does lexical replacement without considering scoping, but needless to say such a macro would be unhygienic).<br>&gt; &gt; I suspect that letrec-syntax was meant for that purpose, but I can't figure out how the parameters to define-syntax-rule would translate to those of letrec-syntax.<br>&gt; &gt;<br>&gt; &gt; Does anyone have sample code for how to get (3) above to work?<br>&gt; &gt;<br>&gt; &gt; Thanks!<br>&gt; <br>&gt; The easiest way is to use internal definitions instead:<br>&gt; <br>&gt; (let ()<br>&gt;    (define a 2)<br>&gt;    (define b 3)<br>&gt;    (define localc 4)<br>&gt;    (define-syntax-rule (absfn varname)<br>&gt;      (lambda (x) (+ (+ x localc) varname)))<br>&gt;    (define afn (absfn a))<br>&gt;    (define bfn (absfn b))<br>&gt;    (afn (bfn 2)))<br>&gt; <br>&gt; Another way is to use letrec-syntaxes+values, as Matthias answered.<br>&gt; <br>&gt; Ryan<br>&gt; ____________________<br>&gt;   Racket Users list:<br>&gt;   http://lists.racket-lang.org/users<br></div>                                               </div></body>
</html>