坂野 正明です。

西松さん、皆さん、こんにちは。

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)」
なんじゃなかろうか、と私は感じるわけです。

いかがでしょうか?

坂野 正明