ごとけんです

In message "[ruby-math:00005] coerce"
    on 00/01/08, Toyofuku <toyofuku / juice.or.jp> writes:

>・現在 coerce の対象は「数と演算」に限るということ
>  になっているが、そもそも「数」とは何か。有限体、
>  p進体クラスができたら多分それらは「数」なんだろう。
>  では環、群では?
>  Matrix は「数」なのか。「数」というより「システム」
>  という気がする。文字列を要素とする Matrix だって
>  (多分)作れるし。
>  「演算」とは何か。「演算」と「演算ではないもの」の
>  違いは?

演算とは、ある集合上Aで定められた関数(数学で言うところの関数、
以下必要に応じて数学関数と書きます)の別称とも言えるでしょう。
たとえば、a + b は関数 +: A x A -> A と言った具合です。一般
には異なる集合間で定義された関数 f: A x B -> C も演算という
こともあると思います。ベクトルのスカラー倍などがそうです。

関数という言葉をつかえば、現行の coercing (型変換)は「関数を
実現したメソッドで利用されている」と言えます(Matrixも含めて)。

さて、メソッド界における数学関数の特徴(制限)は

  * 対象の状態を変化させる操作は数学関数では書けない

ことです。このように状態変化をともなうメソッドと、そうでない
メソッドの区別はこの文脈では重要だと思うので、状態変化をとも
なうメソッドをとりあえず「純メソッド」とでも呼んでおきます。

数学関数はレシーバの状態に影響を与えないので、別のモノに置き
換える等の実現法が許されるわけです。逆にいえば、純メソッドは 
coercing を利用すべきでないでしょう。

>  厳密な定義でなくてもよいが指針は欲しい。

こんな感じでどうですか??

-- gotoken