[Stackless] Stackless support generator functions?

Richard Cooper Richard.Cooper at aprsmartlogik.com
Mon Sep 30 14:16:45 CEST 2002


Quite correct, good example. If you need to pass in a "how to output"
function the you can't work with yield.

def function4(x):
      yield x

wouldn't work for (approximately) the same reasons

def function5(x):
      return x

wouldn't. Functions 1-3 are getting their results out through a globally
scoped 'thing' (stdout, channel1 and List) where as yield and return get
results out through the return value. Both are perfectly valid. It's just a
question of preferred style and using the clearest code for the job in
hand*. 

Richard "We're both right, woohoo!" Cooper

* Discovering the clearest code for the job in hand is left as a exercise
for the reader ;-)

-----Original Message-----
From: Aaron Watters [mailto:aaron at reportlab.com]
Sent: 26 September 2002 20:38
To: Richard Cooper
Subject: Re: [Stackless] Stackless support generator functions?


You are right.  Thanks!

I guess I chose a bad example, but I think my general point
still stands.  Your correction to my example is well taken,
however

Ok, how about this

def inorderMap(tree, function):
    (value, children) = tree
    function(value)
    for c in children:
        inorderMap(c, function)

You can do this

def function1(x):
      print x

def function2(x):
      channel.send(x)

def function3(x):
      List.append(x)

inorderMap(tree, function1); inorderMap(tree, function2); 
inorderMap(tree, function3)

but this does NOT work (no?)

def function4(x):
      yield x

Basically in my view the "yield" mechanism and procedural
abstraction don't really mix well.

As always corrections are always appreciated, thanks.

  -- Aaron Watters

Richard Cooper wrote:

>Actually a yield version of your preorderToChannel function wouldn't be
much
>more complicated. Yes, you can only yield up one level but you can quite
>easily yield what was just yielded to you.
>
>Of the top of my head it would look like this (Untested):
>
>def preorderGenerator(tree):
>    (node, children) = tree
>    yield node
>    for child in children:
>        for x in preorderGenerator(child):
>            yield x
>
>Rich
>
>--
>Richard Cooper
>

_______________________________________________
Stackless mailing list
Stackless at www.tismer.com
http://www.tismer.com/mailman/listinfo/stackless



More information about the Stackless mailing list