Hi Noah, Noah Lavine <noah.b.lav...@gmail.com> writes: > Perhaps this is obvious to everyone else, but it just occurred to me > that (capture-local-environment) is just > (call-with-current-continuation), but running in the environment of > the evaluator instead of the program being evaluated. It's as though > the evaluator was going to look in a tree for more code, but hit a > special node and did a (call/cc). I hope other people find this > interesting.
Ah yes, that's an excellent point! In fact it makes me wonder whether `the-environment' and `local-eval' could actually be implemented this way. I see some complications that might make this strategy impractical or fragile, most notably that we must be assured that the (call/cc) does not happen until (the-environment) would have been _evaluated_, whereas the expander/memoizer/evaluator will want to see what code is there _before_ evaluation. I'll have to think about this. There might be an easy and robust way to do this, or maybe not. Regardless, this is a great way to _think_ about these primitives in terms that Schemers can understand, and maybe a selling point too. I hope we can agree that first-class continuations are insanely great. They carry a significant maintenance cost, but they also add great power when they are needed. So why not first-class continuations for the evaluator itself? :) Thanks! Mark