[#7631] 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...>

小松です。

26 messages 1999/08/12
[#7632] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/12

まつもと ゆきひろです

[#7634] Re: 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...> 1999/08/13

小松です。

[#7636] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7638] cvs HEAD (Re: Re: 1.3 to 1.4) — EGUCHI Osamu <eguchi@...> 1999/08/13

えぐち@エスアンドイーです。

[#7647] Re: cvs HEAD (Re: Re: 1.3 to 1.4) — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7641] Re: [ruby-ext:00382] New coerce scheme — keiju@... (石塚圭樹)

けいじゅ@日本ラショナルソフトウェアです.

26 messages 1999/08/13

[ruby-dev:7710] Re: [ruby-ext:00382] New coerce scheme

From: Shin-ichiro Hara <sinara@...>
Date: 1999-08-18 00:16:44 UTC
List: ruby-dev #7710
原です。

In message "[ruby-dev:7706] Re: [ruby-ext:00382] New coerce scheme"
    on 99/08/17, Toyofuku <toyofuku@juice.or.jp> writes:
|
|  豊福@パパイヤです。

|けいじゅさん
|> この方法で気になるのは, ほとんど同じアルゴリズムを持つ演算が2つづつ必要
|> になりますよね.
|
|  でも例えば matrix.rb では Matrix に対する左側からの演算は
|Scaler の方に書かれているわけで見た目クラスがわかれている
|だけで実質2つずつ書かれているのと同じですよね。

同じですね。しかしこれは「行列*スカラー」と「スカラー*行列」
がたまたま同じだった(似ていた)だけだで、他のものどうしだった
ら違う場合もあり得るわけです。

けいじゅさんの問題にしているのは、すでに

  Ba Bb
  Aa Ab

という計算表がある時に C (= c) というクラスを加えて

  Ca Cb Cc
  Ba Bb Bc
  Aa Ab Ac

という計算表の Cc の部分を2回記述するのがいやといいう事で
しょう。Ca と Ac、Cb と Bc がたまたま一致しても無駄ではな
い。(実際違う場合もありうるから。)

私の案は「C の op に Ca Cb Cc を、op! に Bc Ac を定義させよ」
という感じかな。


|  方針としては、
|・基本的に(iii)を使う。
|・(iii)に書くと不自然になるものは(ii)で書く。
|です。

そうなんですか? 私は基本的には (ii) を使うのではないかと。

coerce の問題点は、Cb と Bc の様に形式として対称であるは
ずの処理が全然対称に見えなかったりすることと、利用法が定
まっていず、各クラスの間で紳士協定があるだけだということ
です。何でもありえるので、とんでもない coerce を書いて正
しく計算する人が出てくるかもしれない。

だから、coerce を書かなくてすむなら、coerce なしで済ませ
るというのが私の案です。多くの場合に当てはまるのではない
かと。

Scalar は、行列の事を知っているスカラーという意味ですよ
ね。下位の事を上位は知らなくていいという協定を破っていま
すね。紳士的な協定破りで面白いけど。(^^

In This Thread