<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Keep in mind that case also isn't really cheap. There's an infinite number of symbols so there is no cheap jump table. -- Matthias</div><div><br></div><div><br></div><br><div><div>On Dec 22, 2014, at 10:10 PM, J Arcane wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Thanks for the insight. I hadn't considered the performance implications involved I suppose (the perpetual problem of the young Lisper ...)<div><br></div><div>And evcase does indeed work more like I expected, for example: </div><div><br></div><div><div><font face="monospace, monospace">(for ([n (in-range 1 101)])</font></div><div><font face="monospace, monospace">  (evcase 0</font></div><div><font face="monospace, monospace">          ((+ (modulo n 5)</font></div><div><font face="monospace, monospace">              (modulo n 3)) (displayln "FizzBuzz"))</font></div><div><font face="monospace, monospace">          ((modulo n 5) (displayln "Buzz"))</font></div><div><font face="monospace, monospace">          ((modulo n 3) (displayln "Fizz"))</font></div><div><font face="monospace, monospace">          (else (displayln n))))</font></div></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">Works exactly as I'd expect. I'll have a look at the code and see if any further insights might be found there for Heresy's (select case ...)</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thanks!</font></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 22, 2014 at 5:20 PM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Look for evcase. -- Matthias<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Dec 21, 2014, at 11:58 PM, J Arcane wrote:<br>
<br>
> Up with a horrible ear-ache this morning I decided to include a FizzBuzz example in Heresy, the Racket #lang I've been working on, and ran into an unexpected behavior in the (case ...) statement.<br>
><br>
> In many languages with case, you can make the testing value a constant, and then make the matching clauses actual calculations which then match against that constant. So when doing FizzBuzz in C-like languages you can do something like "switch 0" and then "case x % 3" for the matching clauses.<br>
><br>
> It turns out this doesn't work in Racket, because Racket quotes the values in the matching clauses so they do not evaluate. Specifically, it narrows down to doing this in (case/sequential-test ...): #`(equal? v 'k)<br>
><br>
> I can implement an alternate version that works as I expect (and will probably include it in Heresy) just by removing that quote in my version, but I was curious as to the reasoning behind this behavior and if perhaps there's some explanation for it that I may've missed.<br>
><br>
> Any insights appreciated,<br>
> John Berry<br>
><br>
</div></div><div class="HOEnZb"><div class="h5">> ____________________<br>
>  Racket Users list:<br>
>  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</div></div></blockquote></div><br></div>
</blockquote></div><br></body></html>