moochan です.

Rangeクラスの議論の刺激を受けてIntervalクラスをちょっと作成
してみました.何かのお役に立てば幸いです.# 無理だろな(笑)

えー,それと短時間で作ったので取説はありません.# and 穴だらけ

# と言っても簡単な機能説明ぐらいないとね...

1.Intervalクラスの生成
    始値,終値,ステップ(省略時1)を与える.
    始値 < 終値 も可
    ステップは正整数でないとエラーになる.
2.始値,終値,ステップを再設定する.
3.添え字を与えて値を得る.
4.次の値を得る
5.前の値を得る
6.ステップの再設定.
7.値の個数を得る.
8.長さを得る.
9.最小値を得る.
10.最大値を得る.
11.全部の値をArrayで返す.

では,どうぞ.

#!/usr/local/bin/ruby

class Interval
  def initialize(beginning,ending,step=1)
    reset!(beginning,ending,step)
  end
  def reset!(beginning,ending,step=1)
    @begin = beginning
    @end = ending
    @step = step
    @direction = 1
    @direction = -1 if @begin > @end
    check_of_step
  end
  def check_of_step
    if @step <= 0
      @step.fail("Interval step value isn't positive.")
    end
    if (@end - @begin).abs < @step
      @step.fail("Interval step is too big.")
    end
  end
  private :check_of_step
  def beginning
    return @begin
  end
  def ending
    return @end
  end
  def step
    return @step
  end
  def step!(step)
    @step = step; check_of_step
  end
  def direction
    return @direction
  end
  def clause(n)
    if n > 0
      @index = n # private instance valuable
      ans = @begin + @direction * @step * (n - 1)
      return ans if @direction ==  1 and @begin <= ans and ans <= @end
      return ans if @direction == -1 and @begin >= ans and ans >= @end
    end
    n.fail("Error in bounds.")
  end
  def [](n)
    clause(n)
  end
  def next
    return clause(index + 1)
  end
  def prev
    return clause(index - 1)
  end
  def index
    return @index
  end
  private :index
  def size
    return (@end - @begin).abs / @step + 1 
  end
  def length
    return max - min
  end
  def min
    return @begin if @direction == 1
    return clause(size)
  end
  def max
    return @begin if @direction == -1
    return clause(size)
  end
  def set
    ary = Array.new
    for n in 1..size
      ary.push(clause(n))
    end
    return ary
  end
end

---
(^。^)(^・^)(^-^)(^ム^)	〜 moochan / ss.hitachizosen.co.jp