diff --git a/lib/functional.rb b/lib/functional.rb index 611891a..4d2142c 100644 --- a/lib/functional.rb +++ b/lib/functional.rb @@ -49,16 +49,23 @@ end class Functional include Enumerable + class DEFAULT + end + class Base attr_reader :exe attr_accessor :next + attr_reader :caller + def initialize &e + @caller = Kernel.caller.first @exe = e end - def call *a + def base_fun *a @next.call *a end + alias call base_fun def end @next.end @@ -74,34 +81,39 @@ class Functional end class Collect @buf.size @next.call @buf @buf.clear end end + alias call slice_fun def end @next.call @buf @@ -231,7 +257,7 @@ class Functional @buf, @n = [], n end - def call *a + def cons_fun *a @buf.push a unless @n > @buf.size class < @buf.size @@ -267,9 +294,10 @@ class Functional @pager.puts a.inspect end - def call *a + def pager_fun *a @pager.puts a end + alias call pager_fun def clean @pager.close @@ -300,8 +328,8 @@ class Functional push Map.new( &exe) end - def reduce &exe - push Reduce.new( &exe) + def reduce iv = ::Functional::DEFAULT, &exe + push Reduce.new( iv, &exe) end def select &exe