<HTML><BODY>It will evaluate (state 'init) and so on in runtime a lot of times.<BR><BR>Of course, I can write a case-like syntax which will process all case-values with given function.<BR><BR>Something like<BR><BR>(case+ x<BR>&nbsp;&nbsp; #:selector state<BR>&nbsp;&nbsp; ((init stage) (initialize))<BR>&nbsp;&nbsp; ((process) (function1))<BR>&nbsp;&nbsp; ((fail) (function2)))<BR><BR>#. if once written, allows avoid writing a lot of such ad-hoc syntaxes.<BR><BR>And it can be used to make version- and platform-independent code like #ifdef in C<BR><BR>Понедельник, 29 июля 2013, 21:03 -04:00 от Matthias Felleisen &lt;matthias@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_13751461710000000259><BASE href="https://e.mail.ru/" target=_self>
<DIV id=style_13751461710000000259_BODY>
<DIV><BR></DIV>
<DIV>Try evcase&nbsp;</DIV><BR>
<DIV>
<DIV>On Jul 29, 2013, at 8:48 PM, Roman Klochkov wrote:</DIV><BR>
<BLOCKQUOTE type="cite">
<DIV><BR>
<DIV>
<DIV id=style_13751452590000000043>
<DIV id=style_13751452590000000043_BODY>#. calcuclates its argument and place it in the program code.<BR>Now I have to write something like <BR><BR>(case state-number<BR>&nbsp; ((0 1) ; state&nbsp;in init, stage1<BR>&nbsp;&nbsp;&nbsp;&nbsp; (initialize))<BR>&nbsp;&nbsp; ((2) ; state = process<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function1)<BR>&nbsp;&nbsp; ((3) ; state = abort<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function2)))<BR><BR>I want to have<BR><BR>(define (state x)<BR>&nbsp; (let rec ([states '(init stage1 process fail)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [pos 0])<BR>&nbsp;&nbsp;&nbsp; (cond<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(null? states) #f]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(eq? (car states) x) pos]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [else (rec (cdr states) (add1 pos))])))<BR><BR>(case state-number<BR>&nbsp; ((#.(state 'init)&nbsp;#.(state 'stage1))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (initialize))<BR>&nbsp;&nbsp; ((#.(state 'process))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function1)<BR>&nbsp;&nbsp; ((#.(state 'fail))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function2)))<BR><BR>So the code becomes self-documenting. Like using enum values in C or Pascal.<BR><BR>Понедельник, 29 июля 2013, 13:32 -04:00 от Asumu Takikawa &lt;<A href="https://e.mail.ru/messages/inbox/sentmsg?mailto=mailto%3aasumu@ccs.neu.edu" target=_blank>asumu@ccs.neu.edu</A>&gt;:<BR>
<BLOCKQUOTE style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 10px; MARGIN: 10px; BORDER-LEFT: #0857a6 1px solid; PADDING-RIGHT: 0px">
<DIV>
<DIV>
<DIV id=style_13751191470000000143>
<DIV id=style_13751191470000000143_BODY>On 2013-07-29 06:25:21 +0400, Roman Klochkov wrote:<BR>&gt; Is there simple way to calculate during compilation. Something like #.<BR>&gt; in&nbsp;Common Lisp.<BR><BR>Can you tell us what #. means in Common Lisp?<BR><BR>I am guessing that you want to do something like the following:<BR><BR>&nbsp;&nbsp;#lang racket<BR>&nbsp;&nbsp;(require (for-syntax syntax/parse))<BR><BR>&nbsp;&nbsp;;; functions to compute costly constants<BR>&nbsp;&nbsp;;; at compile-time<BR>&nbsp;&nbsp;(begin-for-syntax<BR>&nbsp;&nbsp;&nbsp;&nbsp;(define (compute-x) ...)<BR>&nbsp;&nbsp;&nbsp;&nbsp;(define (compute-y) ...)<BR>&nbsp;&nbsp;&nbsp;&nbsp;(define (compute-z) ...))<BR><BR>&nbsp;&nbsp;;; macro that defines x, y, z assuming<BR>&nbsp;&nbsp;;; suitable definitions of compute-x, etc.<BR>&nbsp;&nbsp;(define-syntax (define-constants stx)<BR>&nbsp;&nbsp;&nbsp;&nbsp;(syntax-parse stx<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(_ x:id y:id z:id)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#`(begin (define x #,(compute-x))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define y #,(compute-y))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define z #,(compute-z)))]))<BR><BR>&nbsp;&nbsp;(define-constants my-x my-y my-z)<BR><BR>This will work if the `compute-` functions produce flat data that can be<BR>embedded in syntax, like numbers.<BR><BR>Cheers,<BR>Asumu<BR></DIV></DIV></DIV></DIV></BLOCKQUOTE><BR><BR>-- <BR>Roman Klochkov<BR></DIV></DIV></DIV><BR>
<HR>
<BR>-- <BR>Roman Klochkov<BR></DIV>____________________<BR>&nbsp;Racket Users list:<BR>&nbsp;<A href="http://lists.racket-lang.org/users" target=_blank>http://lists.racket-lang.org/users</A><BR></BLOCKQUOTE></DIV><BR></DIV><BASE href="https://e.mail.ru/" target=_self></DIV></DIV></DIV></BLOCKQUOTE><BR><BR>-- <BR>Roman Klochkov<BR></BODY></HTML>