[plt-scheme] "Standard" coroutine library suitable for building filters as well as generators

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Mon Apr 5 15:08:47 EDT 2010

You may wish to just implement this directly via call/cc & friends.
The implementation is likely to be short (but tricky).

Robby

On Mon, Apr 5, 2010 at 2:03 PM, Scott McLoughlin <scott at adrenaline.com> wrote:
> In addition to generators via yield, I'm also looking for coroutines that
> can
> receive values as well via a coroutine operator such as "receive". Something
> like:
>
> (define-coro (print-all)
>   (while #t
>       (let ((x (receive)))   ; receive is a keyword that blocks on an
> expected "resume"
>          (print x)))))
>
> (let ((pa (print-all)))   ; "instantiates" the coroutine, here with no
> initialization arguments
>   (resume pa 4)         ; this pumps values to a pending "receive" within
> the coroutine
>   (resume pa 2)
>   (resume pa 6))
>
> 4
> 2
> 6
>
> Scott
>
> Jon Rafkind wrote:
>>
>> On 04/05/2010 12:17 PM, Scott McLoughlin wrote:
>>>
>>> I think the term is "fully asymmetric" coroutines, but please correct
>>> me if I'm wrong.  I'm not look for just Python style generators, but
>>> a much more robust coroutine implementation.
>>>
>>> I'm looking for a fairly "canonical, full" coroutine implementation,
>>> where a "yield" like operator can work at activation levels other
>>> than just the top level, and where a "yield" style operator can
>>> function as both a LHS or RHS operator (or two separate operators),
>>> facilitating sending values to a coroutine in a "filter chain" style
>>> structured program.
>>>
>>
>> I'm not exactly sure what you mean by "work at activation levels other
>> than just the top level" but the scheme/generator library lets you send
>> values back through the `yield' operator.
>>
>>
>> http://docs.plt-scheme.org/reference/sequences.html?q=generator#(form._((lib._scheme/generator..ss)._generator))
>>
>>
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>


Posted on the users mailing list.