Skip to content

Instantly share code, notes, and snippets.

@mikewadhera
Created September 30, 2011 17:27
Show Gist options
  • Save mikewadhera/1254424 to your computer and use it in GitHub Desktop.
Save mikewadhera/1254424 to your computer and use it in GitHub Desktop.
lazy_reduce.rb
require 'fiber'
# lazy_reduce([1,2,3], 0) { |o,m| o + m } # => 6
def lazy_reduce(enumerable, memo, &block)
generator = Fiber.new { enumerable.each { |o| Fiber.yield(o) } }
loop do
if generator.alive?
memo = block.call(generator.resume, memo)
else
return memo
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment