Module: Curry

Extended by:
Curry
Included in:
Curry
Defined in:
lib/curry.rb

Instance Method Summary collapse

Instance Method Details

#addObject

operators



110
# File 'lib/curry.rb', line 110

def add; lambda { |a, b| a + b }; end

#allObject



105
# File 'lib/curry.rb', line 105

def all; lambda { |func, xs| xs.select(&func).size == xs.size }; end

#anyObject



106
# File 'lib/curry.rb', line 106

def any; lambda { |func, xs| xs.select(&func).size > 0 }; end

#collectObject

synonyms



94
# File 'lib/curry.rb', line 94

def collect; map; end

#countObject



80
# File 'lib/curry.rb', line 80

def count; lambda { |func, xs| xs.count(&func) }; end

#cycleObject



81
# File 'lib/curry.rb', line 81

def cycle; lambda { |func, xs| xs.cycle(&func) }; end

#cyclenObject



82
# File 'lib/curry.rb', line 82

def cyclen; lambda { |func, n, xs| xs.cycle(n, &func) }; end

#delete_ifObject



85
# File 'lib/curry.rb', line 85

def delete_if; lambda { |func, xs| xs.delete(&func) }; end

#divObject



113
# File 'lib/curry.rb', line 113

def div; lambda { |a, b| a / b }; end

#drop_whileObject



86
# File 'lib/curry.rb', line 86

def drop_while; lambda { |func, xs| xs.drop_while(&func) }; end

#eachObject



72
# File 'lib/curry.rb', line 72

def each; lambda { |func, xs| xs.each(&func) }; end

#each_indexObject



79
# File 'lib/curry.rb', line 79

def each_index; lambda { |func, xs| xs.each_index(&func) }; end

#eqlObject



115
# File 'lib/curry.rb', line 115

def eql; lambda { |a, b| a == b }; end

#evenObject



120
# File 'lib/curry.rb', line 120

def even; lambda { |a| a % 2 == 0 }; end

#fillObject



73
# File 'lib/curry.rb', line 73

def fill; lambda { |func, xs| xs.fill(&func) }; end

#filterObject



102
# File 'lib/curry.rb', line 102

def filter; select; end

#fnotObject



122
# File 'lib/curry.rb', line 122

def fnot; lambda { |a| !a }; end

#foldlObject



30
31
32
33
34
35
36
37
# File 'lib/curry.rb', line 30

def foldl
  lambda do |func, acc, xs|
    xs.each do |x|
      acc = func.call(acc, x)
    end
    acc
  end
end

#foldl1Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/curry.rb', line 40

def foldl1
  lambda do |func, xs|
    acc = nil
    xs.each do |x|
      next acc = x unless acc
      acc = func.call(acc, x)
    end
    acc
  end
end

#foldrObject



51
52
53
54
55
56
57
58
# File 'lib/curry.rb', line 51

def foldr
  lambda do |func, acc, xs|
    xs.reverse.each do |x|
      acc = func.call(acc, x)
    end
    acc
  end
end

#foldr1Object



60
61
62
63
64
65
66
67
68
69
# File 'lib/curry.rb', line 60

def foldr1
  lambda do |func, xs|
    acc = nil
    xs.reverse_each do |x|
      next acc = x unless acc
      acc = func.call(acc, x)
    end
    acc
  end
end

#fpObject



90
# File 'lib/curry.rb', line 90

def fp; lambda { |x| p x }; end

#fprintObject



91
# File 'lib/curry.rb', line 91

def fprint; lambda { |x| print x }; end

#fputsObject



89
# File 'lib/curry.rb', line 89

def fputs; lambda { |x| puts x }; end

#gtObject



116
# File 'lib/curry.rb', line 116

def gt; lambda { |a, b| b > a }; end

#gteObject



117
# File 'lib/curry.rb', line 117

def gte; lambda { |a, b| b >= a }; end

#indexObject



76
# File 'lib/curry.rb', line 76

def index; lambda { |func, xs| xs.index(&func) }; end

#injectObject



96
# File 'lib/curry.rb', line 96

def inject; foldl; end

#inject1Object



99
# File 'lib/curry.rb', line 99

def inject1; foldl1; end

#ltObject



118
# File 'lib/curry.rb', line 118

def lt; lambda { |a, b| b < a }; end

#lteObject



119
# File 'lib/curry.rb', line 119

def lte; lambda { |a, b| b <= a }; end

#mapObject



71
# File 'lib/curry.rb', line 71

def map; lambda { |func, xs| xs.map(&func) }; end

#mulObject



112
# File 'lib/curry.rb', line 112

def mul; lambda { |a, b| a * b }; end

#oddObject



121
# File 'lib/curry.rb', line 121

def odd; lambda { |a| !even[a] }; end

#permutationObject



78
# File 'lib/curry.rb', line 78

def permutation; lambda { |func, xs| xs.permutation(&func) }; end

#powObject



114
# File 'lib/curry.rb', line 114

def pow; lambda { |a, b| a ** b }; end

#reduceObject



97
# File 'lib/curry.rb', line 97

def reduce; inject; end

#reduce1Object



100
# File 'lib/curry.rb', line 100

def reduce1; inject1; end

#rejectObject



77
# File 'lib/curry.rb', line 77

def reject; lambda { |func, xs| xs.reject(&func) }; end

#selectObject



75
# File 'lib/curry.rb', line 75

def select; lambda { |func, xs| xs.select(&func) }; end

#sortObject



74
# File 'lib/curry.rb', line 74

def sort; lambda { |func, xs| xs.sort(&func) }; end

#subObject



111
# File 'lib/curry.rb', line 111

def sub; lambda { |a, b| a - b }; end

#take_whileObject



87
# File 'lib/curry.rb', line 87

def take_while; lambda { |func, xs| xs.take_while(&func) }; end

#to_m(name, funcname) ⇒ Object

converting a proc to a method



126
127
128
# File 'lib/curry.rb', line 126

def to_m(name, funcname)
  eval("def #{name}(*args); #{funcname}[*args]; end")
end

#zipObject



83
# File 'lib/curry.rb', line 83

def zip; lambda{ |func, xs, ys| xs.zip(ys, &func) }; end

#zipWithObject



103
# File 'lib/curry.rb', line 103

def zipWith; zip; end