<HTML><BODY>Thank you. This works just fine in any place, where function is expected.<BR>But the case with "case" still doesn't work<BR><BR>(case 5<BR>&nbsp;&nbsp;&nbsp; [((hash-dot (+ 2 3))) 1]<BR>&nbsp;&nbsp;&nbsp; [else 2])<BR>=&gt; 2<BR><BR>I think, that I need to do something with the Racket reader.<BR><BR><BR>Понедельник, 29 июля 2013, 13:53 -04:00 от Vincent St-Amour &lt;stamourv@ccs.neu.edu&gt;:<BR>
<BLOCKQUOTE class=mailru-blockquote style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 10px; MARGIN: 10px; BORDER-LEFT: #0857a6 1px solid; PADDING-RIGHT: 0px">
<DIV>
<DIV class="js-helper js-readmsg-msg">
<STYLE type=text/css></STYLE>

<DIV class=mr_read__body id=style_13751204460000000879><BASE href="https://e.mail.ru/" target=_self>
<DIV id=style_13751204460000000879_BODY>Here's a quick solution:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;#lang racket<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;(define-syntax-rule (hash-dot e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let-syntax ([computed-e (lambda (stx) (datum-&gt;syntax #'e e))])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(computed-e)))<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;(hash-dot (+ 2 3))<BR><BR><BR>This defines a local macro that computes the value of `e' at compile<BR>time. Any binding that you use in `e' will need to be bound at syntax<BR>time (which, in #lang racket, is all of racket/base), which may mean<BR>using `(require (for-syntax X))'.<BR><BR>If you try to compute, say, a function at compile-time, you'll run into<BR>trouble, though.<BR><BR>Vincent<BR><BR><BR><BR>At Mon, 29 Jul 2013 06:25:21 +0400,<BR>Roman Klochkov wrote:<BR>&gt; <BR>&gt; [1 &lt;multipart/alternative (7bit)&gt;]<BR>&gt; [1.1 &lt;text/plain; utf-8 (base64)&gt;]<BR>&gt; Is there simple way to calculate during compilation. Something like #. in&nbsp;Common Lisp.<BR>&gt; <BR>&gt; For example how to do something like<BR>&gt; (case ftype<BR>&gt; ((#.(keyword-&gt;g-type 'enum)<BR>&gt; #.(keyword-&gt;g-type 'flags))<BR>&gt; (convert-to-foreign value (g-type-&gt;lisp type)))<BR>&gt; (#.(keyword-&gt;g-type 'double)<BR>&gt; (coerce value 'double-float))<BR>&gt; (#.(keyword-&gt;g-type 'float)<BR>&gt; (coerce value 'single-float))<BR>&gt; ((#.(keyword-&gt;g-type 'int)<BR>&gt; #.(keyword-&gt;g-type 'uint)<BR>&gt; #.(keyword-&gt;g-type 'long)<BR>&gt; #.(keyword-&gt;g-type 'ulong)<BR>&gt; #.(keyword-&gt;g-type 'int64)<BR>&gt; #.(keyword-&gt;g-type 'uint64)) <BR>&gt; (round value))<BR>&gt; (else value))<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; where keyword-&gt;g-type is a function (-&gt; symbol? exact-integer?).<BR>&gt; <BR>&gt; I don't want to place resulting numbers, because then there will be a lot of "magic numbers" corresponfing to different foreign types. <BR>&gt; <BR>&gt; <BR>&gt; -- <BR>&gt; Roman Klochkov<BR>&gt; [1.2 &lt;text/html; utf-8 (base64)&gt;]<BR>&gt; <BR>&gt; [2 &lt;text/plain; us-ascii (7bit)&gt;]<BR>&gt; ____________________<BR>&gt; Racket Users list:<BR>&gt; <A href="http://lists.racket-lang.org/users" target=_blank>http://lists.racket-lang.org/users</A><BR></DIV><BASE href="https://e.mail.ru/" target=_self></DIV></DIV></DIV></BLOCKQUOTE><BR><BR>-- <BR>Roman Klochkov<BR></BODY></HTML>