坂野 正明です。 西松さん、皆さん、こんにちは。 At Wed, 31 Mar 2004 23:07:02 +0900, NISHIMATSU Takeshi wrote: > PostScriptは/がなく, divとidivとはこんなかんじです: 私の愛する PostScript が出てくるとは思いませんでした (笑) PostScript (のような逆ポーランド記法)の場合、 "数字 数字 演算子" の順になって、日常使う 「5 + 6」 などの表現とは完全に異なります から、、、演算子が記号でなく、言葉なのは(私は)自然に受け入れられます。 # 実際、PostScript の場合、「+」でなく「add」、「-」は「sub」ですし。 一方、Ruby (に限りませんが)の場合、日常使う 「5 + 6」 形式でそのまま書けますから、、、「/」の挙動には議論の余地がある、 と感じます。 > Rationalが返ってくるのは, 数学的には自然かもし > れませんが, 普通のプログラミングにはありがた迷惑な気がし > ます. # 「数学」的なんて高級じゃなく、「算数」的… (どうでもいいですが ^^;) Rational が返ってきて、普通のプログラミングに迷惑な状況、というのが、 ちょっと思いつかないのですが、例えば、どんな状況でしょうか? Ruby の Integer の Fixnum, Bignum は素晴らしいです (_o_)。ユーザーは、 Fixnum, Bignum の違いをほぼ全く意識しなくていいですから。 Rational も同様で、ユーザーが意識する必要があることはほとんどないと 思うのですが。 気になることがあるとすれば、、、 A. 速度が多少遅くなる B. puts Rational(4,3) で直接出力した時、「4/3」と出てくる B. に関しては、printf を使う、Rational#to_s を書き換える、 などの方法で挙動変更できますし、第一、皆様の要望が強ければ Default の 挙動も変更され得るでしょう。つまり、本質的問題ではない。 他に、Rational だからありがた迷惑、というケースは…私にはちょっと 思いつきません。 # 整数でないと困るというケースはもちろんあるわけですが、(Floatでなく) # Rational だから困る、というケースはないのでは? という問いかけです。 # 結局、Rational とは、ユーザー的には、単に Float から誤差を無くして # 進化させたもの(現在の計算機由来の特別な現象を気にしなくて済む分、 # ユーザー的には取り扱いがさらに簡単)、と考えていいかと思う次第です。 # (余談) Float(=浮動小数点)より、言葉の響きも簡単・堅実そうでしょう? (笑) 整数でないと困る可能性のある(頻出)ケースとして、配列(Array)の添字が 思いつきます。しかし、現在の Ruby は、配列の添字として、Float も Rational もそのまま受け付けますので、これは、実質上、問題になる ことはそう多くなさそうに思います。 # ["a",1,"c"][1.5] => 1 きっちり、整数/整数 => 整数とコントロールしたい場合、結果の有理数を、 to_i なり floor, truncate, round, ceil なりで、変換すれば一発です。 # 現在の Ruby の「/」の挙動は、to_i (または floor)、一方、C, Fortran は、 # truncate ですね。 # もちろん、現在の Ruby の挙動そのままでよければ、「/」の代わりに # 「.div」を使ってもいいですね。 > C, Fortran はキャストを忘れて a=(double)i/j; と書くべき > ところを a=i/j; と書いてなかなか見つからないバグになる > ことが多いですね. まあこれは自動的な型変換のせいですが. はい、多いですね (泣) 個人的には、C のような低級言語、Fortran のような速度命の 言語では、現代の計算機特有の枠組に縛られても仕方ない面がある、と 感じます。つまり、変数の厳密な(自然であれ不自然であれ)型が あって、ユーザーがそれを常に気にしなくてはいけない、というのも やむを得ない --- それもパズルの一つと思えば、楽しくなくもないか、と。 一方、Ruby のような高級言語では概念こそを気にして、もっと 楽に自然にプログラミングできれば、と願う次第です。 オブジェクト指向としては、オブジェクトを常に気にするべきなのは 当然です。で、今の Ruby の「/」の挙動は、「整数(Integer)」という オブジェクトをユーザーが常に気にしなくてはいけない仕様だと感じます。 一方、ユーザーが最も自然に気にするのは、ただ「数(Numeric)」 なんじゃなかろうか、と私は感じるわけです。 いかがでしょうか? 坂野 正明