まつもと ゆきひろです

ruby-talkの話ですが、ruby-devにふります。

ruby-mathな話かもしれませんが、ふなばさんは参加しておられな
いので。

In message "Re: modulo and remainder"
    on 00/07/04, Tadayoshi Funaba <tadf / kt.rim.or.jp> writes:

|I hope not.
|
|I wrote a method jd_to_wday in date2.rb like this:
|
|    def jd_to_wday(jd) (jd + 1) % 7 end
|
|It calculates the day of week of the given the Julian day number.
|I used % and it must be modulo.  So it works even if jd is -ve.
|
|I can write it in Python too.  Scheme and Common lisp have both.  Why
|should we choose one?  I need modulo.

うーむ、moduloが必要だという点については理解しました。

ふなばさんとしては「moduloがあれば良い」という立場なのでしょ
うか? それともPython流divmodでないと良くないという立場なの
でしょうか?

|BTW, I wish divmod to behave like floor in Common Lisp or Python's.
|And we may use floor, ceil and round in all numerical domain, I think.
|(Integer#floor just returns self) Ruby has some restrictions in math,
|I think.  I don't need that.

数学(算数)に弱い作者のせいですね。まあ、そればっかりは素養の
問題もあるんでしかたがないんです。どなたかが助けてくださらな
い限り改善されないと思います。

ところで上記のふなばさんのおっしゃっていることが良く分からな
かったのですが、結局は

  * Pythonの/, %の挙動が望ましい

ということなんでしょうか?

Pythonは(floorする/と)moduloは提供しますけど、remainderは提
供しませんよね。

Schemeは(Rubyの新挙動と同じ)quotientと(新挙動ではなくなった)
moduloとremainderを持ちます。

Common Listは/はrationalを返してしまいます。それとは別にmod
とremという関数があります。

さて、ではRubyとしてはどのよう挙動を採用すべきでしょう。

ruby-talkにも書きましたが、ありえる選択肢としては

  * Python流
  * 現状(+modulo)

くらいを考えてます。でも、CL流のmod,remメソッドを導入(%はそ
のどちらかへのalias)というのもありえると思います。

                                まつもと ゆきひろ /:|}