David Herman wrote at 10/09/2010 10:30 PM:
I think you may be missing a crucial point: once control hits the first passing test, there are no more conditionals; every right-hand side is compiled as a procedure that unconditionally tail-calls the next right-hand side. IINM, this is pretty much the same way `switch' is typically compiled: each case is treated as a basic block boundary, and compilers often connect up basic blocks with explicit jumps in the IR.
Probably I'm missing something, since you know the compiler better than I do.
My understanding is that your code prescribes a series of branching tests, rather than giving the compiler a single n-way "case" and letting the compiler decide what the individual branch tests should be. That's the difference I was wondering about.
Regarding chaining local closures with tail calls that are easy to optimize, I thought I had the same thing going on in my code.
-- http://www.neilvandyke.org/ _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users