児玉 です.

From: IKEGAMI Daisuke <daisu-ik / is.aist-nara.ac.jp>
Subject: [ruby-math:00365] Re: one/zero for algebraic class
Date: Fri, 08 Sep 2000 13:13:53 +0900
Message-ID: <200009080413.AA32449 / rho.aist-nara.ac.jp>

> いけがみです.
> 
> 多項式を生成するのに,文字列で与えているから
> このような問題が起こるのではないかしら.
> 
> > g=Polynomial("3 x**2 + x + 1", Complex(1) )
> 
> x = Polynomial("x")

1変数と多変数で実現法は違うんですが,
この段階で x の内部表現は (1元)* x 相当になっています.
抽象的に シンボル x を生成しているわけでは無いのが問題のような...

# 概略を云えば
# x = ( 1元, "x" ) の組(PolynomialM クラス) 又は
# x = [0元 (0次の係数), 1元(1次の係数)] の係数列 (Polynomial クラス)
# のように実現しています.

x 自体に 既に係数が含まれているので
この係数の coerce がうまくできていれば

g = 3*x**2 + 1 * x  + Complex(1);
で良いはずです.

できれば, 以下も受け付けるように書きたい.
g = 3*x**2 + x  + 1;

環 K のクラスへの整数 n の作用 (n 回の和) に対して,
この意味で n を (1元)*n  とみなせるなら
(そのように クラス K で * や + を定義しているなら)
Polynomial の方でも 上のような書き方を許すようになっていてほしい.
# 多分, できるはず.

> g = Complex(3) x**2 + Complex(1) * x  + Complex(1)

一般の環も考慮するとこのように明示する形式が最も安全.

> と書けば,どのような数でも対応できるのではありませんか?

x の実装に依存.
現状では, 上にかいたように, x の内部表現は (1元)* x 相当なので.
x の生成時に注意する必要がある.

> # この場合,Polynomial か Complex のどちらかが
> # かけ算を拡張していないといけないわけですが.

はい, Polynomial の側の coerce の修正で出来そうです.

-- 
K.Kodama(kodama / kobe-kosen.ac.jp)