Scheme style and Python style [was: Re: Typed Python?]

Christopher T King squirrel at WPI.EDU
Wed Jul 7 16:00:10 EDT 2004


On Wed, 7 Jul 2004, [iso-8859-1] François Pinard wrote:

> I recently worked on my little `pynits' tool (hoping to release it a
> third time, as soon as I'm satisfied enough with the changes), and have
> a need for continuations there.  The circumstances for that need may be
> slightly unusual, but I would surely not qualify them as abnormal :-).
> 
> Suddenly backtracking out of a complex involvement for restarting in a
> new direction, for the above project at least, requires a lot of state
> resumption, and doing this cleanly in Python implies a rather strict and
> burdening discipline about where and how the state information is kept.
> While tractable, this is not as comfortable as I would have liked it...

It may be possible to do what you want to do using only generators. 
Assuming that you have some N-deep nested structure, you could do 
something like this:

def dootherstuff():
    <do some stuff>
    if <exceptional condition>:
        yield <some helpful value>
    <do more stuff>

def dostuff():
    <do some stuff>
    for value in dootherstuff():  # call dootherstuff(), propogating yields
        yield value
    <do more stuff>
    if <exceptional condition>:
        yield <some helpful value>
    <finish doing stuff>

for value in dostuff():
    <handle exceptional condition described by value>

Alternatively, you could replace the for loops with something like:

continuation=dostuff()
try:
    value=continuation.next()
except StopIteration:
    <store continuation away for future use>
else:
    <function completed, carry on>

Dunno if this helps or not....




More information about the Python-list mailing list