Hi all-

I was searching through the mail archives for info on coroutines and  
stumbled on this:

> Csaba Henk
> Mon, 16 Apr 2007 15:26:44 -0700
> Eg., for Python, I created a generator which yielded the numbers  
> from 0
> up to 100,000, and I iterated through it:
>
> def gen():
>       for i in xrange(10**5):
>               yield i
>
> for i in gen():
>       pass
        
And a Factor version was given in response:

> On 2007-04-16, Chris Double <[EMAIL PROTECTED]> wrote:
> If all you want to test is coroutines, rather than the message passing
> aspects of concurrency, you can use libs/coroutines:
>
> "libs/coroutines" require
> USE: coroutines
> : gen ( -- co ) [ 100000 [ over coyield 2drop ] each f swap  
> coyield ] cocreate ;
> : run ( co -- ) f swap coresume [ run ] [ drop ] if ;
>
> [ gen run ] time
>
> This is the equivalent of the Pythonsample you posted. Unfortunately
> continuations don't compile so the test runs interpreted.

The above word "run" won't compile in the current Factor.

I spent some time studying coroutines, but still, what I know would  
fit on the head of a pin. I came up with the following:

USE: coroutines
: gen ( -- co ) [ 10000 [ coyield ] each coterminate ] cocreate ;
: run ( co -- ) f over coresume [ run ] [ drop ] if ;
[ gen run ] time

I'm still trying to figure how my solution differs from the previous  
one. Also, using recursion, I get a stack overflow if I attempt 10**5  
iterations.

Thanks for any insight!

Charles



------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to