Module: Functions::PreludeMeta::ClassMethods
- Included in:
- Functions::PreludeMeta
- Defined in:
- lib/functions/prelude_meta.rb
Instance Method Summary collapse
-
#after(c, f, g) ⇒ Object
alias :def_compose :compose.
- #compose(c, f, g) ⇒ Object
- #create_proc_method(c, f, i = :f) ⇒ Object
- #define(*params) ⇒ Object
- #define_v1(c, definition) ⇒ Object
- #define_v2(definition, name) ⇒ Object
-
#filter(c, f) ⇒ Object
alias :def_map :map.
-
#foldl(c, f, i) ⇒ Object
alias :def_parallel :parallel.
-
#foldr(c, f, i) ⇒ Object
alias :def_reduce_left :reduce_left.
-
#map(c, f) ⇒ Object
alias :def_reduce_right :reduce_right.
-
#method(m) ⇒ Object
(also: #def_method)
alias :def_filter :filter.
-
#parallel(c, f, g) ⇒ Object
alias :def_after :after.
-
#reduce_left(c, f) ⇒ Object
alias :def_foldl :foldl.
-
#reduce_right(c, f) ⇒ Object
alias :def_foldr :foldr.
Instance Method Details
#after(c, f, g) ⇒ Object
alias :def_compose :compose
52 53 54 |
# File 'lib/functions/prelude_meta.rb', line 52 def after(c, f, g) compose(c, g, f) end |
#compose(c, f, g) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/functions/prelude_meta.rb', line 39 def compose(c, f, g) m = create_proc_method(c, f, :f) n = create_proc_method(c, g, :g) code = %Q{ def #{c}(x) #{m}(#{n}(x)) end } module_eval(code) end |
#create_proc_method(c, f, i = :f) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/functions/prelude_meta.rb', line 11 def create_proc_method(c, f, i=:f) if Proc === f define_method("#{c}_#{i}_proc", f) return "#{c}_#{i}_proc" else return f end end |
#define(*params) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/functions/prelude_meta.rb', line 30 def define(*params) if Symbol === params[0] define_v1(*params) else name = params[0].delete(:as) define_v2(*params[0], name) end end |
#define_v1(c, definition) ⇒ Object
20 21 22 23 |
# File 'lib/functions/prelude_meta.rb', line 20 def define_v1(c, definition) key, value = definition[:as].first self.send(key, c, *value) end |
#define_v2(definition, name) ⇒ Object
25 26 27 28 |
# File 'lib/functions/prelude_meta.rb', line 25 def define_v2(definition, name) key, value = definition self.send(key, name, *value) end |
#filter(c, f) ⇒ Object
alias :def_map :map
131 132 133 134 135 136 137 138 139 |
# File 'lib/functions/prelude_meta.rb', line 131 def filter(c, f) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.select { |x| #{m}(x) } end } module_eval(code) end |
#foldl(c, f, i) ⇒ Object
alias :def_parallel :parallel
71 72 73 74 75 76 77 78 79 |
# File 'lib/functions/prelude_meta.rb', line 71 def foldl(c, f, i) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.inject(#{i}) { |r, x| #{m}(r,x) } end } module_eval(code) end |
#foldr(c, f, i) ⇒ Object
alias :def_reduce_left :reduce_left
95 96 97 98 99 100 101 102 103 |
# File 'lib/functions/prelude_meta.rb', line 95 def foldr(c, f, i) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.reverse.inject(#{i}) { |r, x| #{m}(r,x) } end } module_eval(code) end |
#map(c, f) ⇒ Object
alias :def_reduce_right :reduce_right
119 120 121 122 123 124 125 126 127 |
# File 'lib/functions/prelude_meta.rb', line 119 def map(c, f) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.map { |x| #{m}(x) } end } module_eval(code) end |
#method(m) ⇒ Object Also known as: def_method
alias :def_filter :filter
143 144 145 146 147 148 149 150 |
# File 'lib/functions/prelude_meta.rb', line 143 def method(m) code = %Q{ def #{m}(o) o.#{m} end } module_eval(code) end |
#parallel(c, f, g) ⇒ Object
alias :def_after :after
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/functions/prelude_meta.rb', line 58 def parallel(c, f, g) m = create_proc_method(c, f, :f) n = create_proc_method(c, g, :g) code = %Q{ def #{c}(x) [#{m}(x),#{n}(x)] end } module_eval(code) end |
#reduce_left(c, f) ⇒ Object
alias :def_foldl :foldl
83 84 85 86 87 88 89 90 91 |
# File 'lib/functions/prelude_meta.rb', line 83 def reduce_left(c, f) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.inject { |r, x| #{m}(r,x) } end } module_eval(code) end |
#reduce_right(c, f) ⇒ Object
alias :def_foldr :foldr
107 108 109 110 111 112 113 114 115 |
# File 'lib/functions/prelude_meta.rb', line 107 def reduce_right(c, f) m = create_proc_method(c, f) code = %Q{ def #{c}(arr) arr.reverse.inject { |r, x| #{m}(r,x) } end } module_eval(code) end |