I've been converting a bunch of Python to Racket lately, and I have a
lot of loops that use break and continue. I end up turning them into:

(let/ec break
  (for (...)
    (let/ec continue
      ; do some work
      (when this-iteration-isn't-what-i-want
        (continue))
      ; do more expensive work
      (when found-what-i-want
        (break what-i-want)))))

I thought it would be nice if the let/ec's could be integrated with
for, so that you could instead write:

(for (#:ec break
       ...
       #:ec continue)
      ; ...same as above...

In an attempt to help convey the behavior I want, I threw this patch together:

https://github.com/jkominek/racket/commit/b291a0b994c679445b3210bd3efba8c6cea867e4

I feel it behaves reasonably when using for and for/fold, but for/list
doesn't behave in any way I'd hope for.

Ideally somebody who understands for's implementation will agree that
this is a great idea, and go make it all work nicely. :) Failing that
I'm open to suggestions for how to make it behave better, in a fashion
which would make it appropriate for inclusion.

-- 
Jay Kominek
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to