diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 8146014..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-functional.gemspec
-pkg
diff --git a/README.md b/README.md
index 1478272..d625a86 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,3 @@
-Obsolete
-========
-
-Use `#lazy`.
-
Install
=======
@@ -13,88 +8,8 @@ Usage
require 'functional'
- # To demonstrate Functional, we create a Class with a infinite loop:
- class Sequence
- include Enumerable
- def initialize first = 0, step = 1
- @i, @step = first, step
- end
- def each
- # Our infinite loop:
- loop do
- yield @i
- @i += @step
- end
- end
- end
-
- Functional.new( Sequence.new).
- select {|i| i.even? }.
- collect {|i| i/3 }.
- select {|i| i.even?}.
- collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
- flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
- p
-
- # Without Functional... Bye bye.
- Sequence.new.
- select {|i| i.even? }.
- collect {|i| i/3 }.
- select {|i| i.even?}.
- collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
- flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
- p
-
-It will never realize, that #p doesn't exists, because the first select runs endless.
-Functional#p prints everything to stdout.
-
- (0..100000).to_fun.
- collect {|i| i*3 }.
- select {|i| i%5 == 2 }.
- to_a
-
-Thanks to `Symbol#to_proc`:
-
- Sequence.new.to_fun.
- select( &:even?).
- collect {|i| i/3 }.
- select( &:even?).
- collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
- flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
- p
-
-If you know methodphitamine, combine it:
-
- require 'methodphitamine'
-
- Sequence.new.to_fun.
- select( &it.even?).
- collect( &it/3).
- select( &it.even?).
- collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
- flatten.
- p
-
- (0..100000).to_fun.
- collect( &it*3).
- select( &it%5 == 2).
- to_a
-
-Makros
-======
-
- seq = Sequence.new.to_fun
- seq = seq.select &it.even? if must_be_even
- seq = seq.
- collect( &it/3).
- select( &it.even?).
- collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }
- seq = seq.flatten if please_flatten
- if print_it
- seq.p
- else
- seq_to_a
- end
+ obj = 0 .. 10**12
+ Functional.new( obj).select {|i| i.even? }.collect {|i| i/3 }.select {|i| i.even? }.each &method( :puts)
What's with _#map_?
=================
diff --git a/VERSION b/VERSION
index 9faa1b7..8acdd82 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.5
+0.0.1
diff --git a/lib/functional.rb b/lib/functional.rb
index f129e3d..dce2126 100644
--- a/lib/functional.rb
+++ b/lib/functional.rb
@@ -1,465 +1,46 @@
-class ::Regexp
- class NegRegexp
- def initialize r
- @rx = r
- end
- def match l
- ! @rx.match( l)
- end
- def =~ l
- ! @rx =~ l
- end
- def -@
- @rx
- end
- end
-
- def -@
- NegRegexp.new self
- end
-end
-
-class ::Object
- def to_fun meth = nil
- Functional.new self, meth
- end
-end
-
-class Counter
- include Enumerable
- attr_reader :c
-
- def initialize first = nil, step = nil
- @c, @step = first || 0, step || 1
- end
-
- def next; @c += @step end
- def to_i; c.to_i end
- def to_f; c.to_f end
-
- def + i
- @c += @step*i
- end
-
- def each &e
- loop { e.call self; self.next }
- end
-end
class Functional
- def self.__version__() '0.1.5' end
include Enumerable
- class DEFAULT
+ def self.method_missing meth, *args, &exe
+ self.new.send meth, *args, &exe
end
- class Base
- attr_reader :exe
- attr_accessor :next
- attr_reader :caller
-
- def initialize &e
- @caller = Kernel.caller.first
- @exe = e
- end
-
- def base_fun *a
- @next.call *a
- end
- alias call base_fun
-
- def end
- @next.end
- end
-
- def clean
- @next.clean
- end
-
- def to_proc
- method( :call).to_proc
- end
- end
-
- class Collect @buf.size
- @next.call @buf
- @buf.clear
- end
- end
- alias call slice_fun
-
- def end
- @next.call @buf
- @next.end
- end
- end
-
- class Cons @buf.size
- class < @buf.size
- @next.end
- end
- end
-
- class Pager [ [0, _A], [1, _B], ..., [_I, _C], ..., [_N, _D]]
- # [ [_A|_As], [_B|_Bs], ..., [_C|_Cs], ..., [_D|_Ds] ] ==> [ [0,_A|_As], [1,_B|_Bs], ..., [_I,_C|_Cs], ..., [_N,_D|_Ds] ]
- def with_index &exe
- i = 0
- exe ||= Array.method :[]
- push Collect.new {|*a| exe.call i, *a; i += 1 }
- end
-
- def slice n, &exe
- push Slice.new( n)
- block_given? ? self.collect( &exe) : self
- end
-
- def cons n, &exe
- push Cons.new( n)
- block_given? ? self.collect( &exe) : self
- end
-
- def tap &exe
- push Tap.new( &exe)
- end
-
- class Save < Base
- attr_reader :db
-
- def initialize db
- @db = db
- end
-
- def call k, *v
- @db[ k] = v.length == 1 ? v.first : v
- end
- end
-
- def save db
- push Save.new( db)
+ @obj.send @func || :each, *@args, &eval( "lambda{|value|#{@stack.join( ";")};exe.call(value)}")
end
end
diff --git a/test/functional_test.rb b/test/functional_test.rb
deleted file mode 100644
index 9497c66..0000000
--- a/test/functional_test.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'test/unit'
-require 'functional'
-
-class FunTest < Test::Unit::TestCase
- M = 0..100
-
- def doit_fun m, &exe
- f = m.to_fun
- yield f
- f.to_a
- end
-
- def test_to_fun_exists
- assert_respond_to Object, :to_fun
- end
-
- def test_to_a
- assert_equal M.to_a, doit_fun( M) {|x| x }
- end
-
- def test_collect
- l = lambda {|x| x*2}
- assert_equal M.collect( &l), doit_fun( M) {|x| x.collect( &l) }
- end
-
- def test_inject
- assert_equal M.inject( 0) {|i,j| i+j }, M.to_fun.inject( 0) {|i,j| i+j }
- end
-end