On Behalf Of Peter Marsh:
# [2,6,18,54] series. So I suggest this:
# arithmetic_series = Arith.new(First_Term,Common_Difference)

nice, but i am poor in english, and there are too many words in ruby already.
i'd propose extending Range a bit (i hope), like

Range.new(start, end, exclusive=false, diff=&:succ)

where diff could be
  &:succ where next term is succ
         this is the current implem
  &:pred where next term is pred (succ==pred)
         this has the effect of defining a reverse range
         ("z".."x")==("x".."z").reverse == Range.new("z".."x",,&:pred)
         "z".succ => "y"
         "y".succ => "x"
         eg, r=Range.new("z","x",,&:pred)
             r.each{|x| p x} => z y x
  &:+n   where next term is term+n
  &:-n   where next term is term-n
         eg, r=Range.new(100,96,,&:-2)
             r.each{|x| p x} => 100 98 96
  &:*n   where next term is term*n
  &:/n   where next term is term/n
  {blck} where {blck} is a code block
         where {block} defines next/succ
         eg, r=Range.new("0a","zz",) do |x| 
                 case
                    when x=="0z"
                       "aa"
                 else
                    x.succ
                 end
               end
             r.each{|x| p x} => 0a 0b.. 0z aa ab ..yz zz

or something like that to that effect..