[racket] Is there a better way to do this in Racket?

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Sun May 13 17:28:56 EDT 2012

Harry Spier wrote at 05/13/2012 04:47 PM:
> Is there a better way to do this iin Racket (shorter, clearer, more readable)?

If this you are doing large numbers of this operation, and you are 
performance-sensitive, I suggest that one of your top criteria for 
``better'' should be *efficiency*.

 From a glance, I think you could do this more efficiently, even if you 
don't use bit-banging tricks.  For doing this efficiently without 
bit-banging, I suggest keeping this mantra in mind: "minimize consing".  
That's far from the only advice or even best advice, but I think it's a 
good place to start in this case.  I mention it because you are doing 
some good things in your code, and I think now is the time to be 
thinking more about consing.  ("Consing" is when a pair is allocated by 
Racket, and is an old, simplified model for reasoning about allocation 
and performance in Lisps.  "cons" allocates one pair; "list", "reverse", 
"append", etc. allocate many pairs.)

After you change the code for reduced consing, you can look at smaller 
things in that code, like whether you're doing any tests or other 
computation redundantly, whether "vector-ref" is faster than some 
stream/iterator abstraction, Boolean algebra reduction, etc.

If you don't care about optimizing this, then I suspect people will push 
you in different directions than I would.

Neil V.

Posted on the users mailing list.