いけがみです。

まつもとさんのご指摘のように、#step を

  idx = i
  while idx < max
    idx += step
  end

だと思うと、a, b, c をそれぞれ "数に対応するオブジェクト" とするとき

  1. ある順序 < のもとで Comparable (全順序) でなければならない
  2. 加法が定義できて、Comparable で考慮した順序と矛盾しない:
     a < b ならば a + c < b + c が必ず成り立つ

の二条件が必要だろうと思います。

さらに #step が必ず有限回で停止することを保証する必要があるならば、
  3. 零元 0 が存在して、 任意の a に対し 0 < a  
が必要です。

1. 2. 3. をみたす数のクラスを ordered monoid と呼んでいます。
また、順序 < が 2. 3. を満たすとき < は admissible であるといいます。

具体例をあげると、Complex は数学的に意味のある順序は持たないと思います。
(Complex は議論の余地はあると思いますが…)

  したがって、Complex がそもそも Numeric なのか?
   (Numeric は Comparable を include しているから)
  という、昔から議論されている問題(*)とかぶるんじゃないかなあ。
  (*) [ruby-talk] Subject: inconsistence in class complex 

逆に、 ordered monoid なら #step は定義できます。
Numeric = ordered monoid です。

Scalar という特別な名前は、どのような特徴を持っていますか?
(ということが僕にはわからなくて、すみません)

Scalar は matrix.rb で定義されていて、
四則演算を持っていて、Matrix, Vector とも作用するので、
「(可換)体」であることと本質的に変わらないように思われるのですが。
--
池上 大介
Daisuke IKEGAMI <daisu-ik / is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室