[Ann Lab419::functional] A stream implementation for Ruby

R

Robert Dober

Hi all

Streams are lazily evaluated lists. I have been inspired by James'
excellent blog about infinite streams, and the functional interface
of Scheme towards their usage.
But just in order to keep this short I have put all the links to the
release, documentation and other sources on the Labrador Rubyforge
Homepage.
http://labrador.rubyforge.org/index.html

Enjoy.
Robert
 
B

Brian Candler

Robert said:
Streams are lazily evaluated lists.

Aside: it is also possible to make use of infinite enumerators in Ruby
(i.e. a traditional 'each' method which yields an infinite number of
values), and this may be sufficient in some applications.

In order for this to be useful, you need to process chains of methods
acting 'horizontally' instead of 'vertically'. The block form of
Enumerator lets this be done natively in ruby 1.9:
http://redmine.ruby-lang.org/issues/show/707

and with a little work, this can be made entirely transparent to map,
select etc:
http://redmine.ruby-lang.org/issues/show/708

It turns out to be very easy to implement the block form of Enumerator
in ruby 1.8. I contributed an implementation of this to the Facets
project:

http://facets.rubyforge.org/git?p=facets.git;a=blob_plain;f=lib/lore/facets/enumerator.rb;hb=HEAD
http://facets.rubyforge.org/git?p=facets.git;a=blob_plain;f=lib/more/facets/filter.rb;hb=HEAD

Anyway, I just thought this was worth a mention. It's not as powerful as
full lazy evaluation, although if you combine this with Generators I
think it gets pretty close.

Regards,

Brian.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top