[gambit-list] (case)

Christian Jaeger christian at pflanze.mine.nu
Fri Oct 31 13:13:53 EDT 2008


Per Eckerdal wrote:
>> Ok, then my code is now rewritten as
>>
>>  (case (string->symbol ".ab") ((.ab) 1) (else 2))
>>     
>
> Keep in mind, though, that interned symbols are not garbage collected,  
> so string->symbol with arbitary input might result in memory leaks.

For which there is a workaround here:
http://scheme.ch/gambit/preview/cj-symbol.scm
(and http://scheme.ch/gambit/preview/cj-symbol-module.scm)

for those who didn't get this through irc support.

Anyway, a hash lookup will only outperform string=? if there are more 
than just a couple of strings to compare. I.e.

(cond ((string=? foo ".ab") ..) (else ..)) will be faster.

And, once you're using a hash lookup anyway, there's no point using a 
case statement which still does the linear search anyway. You could just 
map the string to a thunk then.

((table-ref map the-key default-thunk))

Christian.




More information about the Gambit-list mailing list