[#8530] Enumerable and rand — Koretsugu Daigoro <tmmcross@...>

これつぐです。

21 messages 1999/12/05
[#8534] Re: Enumerable and rand — matz@... (Yukihiro Matsumoto) 1999/12/06

まつもと ゆきひろです

[#8581] Re: [ruby-list:19228] Ruby 1.4.3 — Katsuyuki Komatsu <komatsu@...>

小松です。

19 messages 1999/12/07
[#8592] Re: [ruby-list:19228] Ruby 1.4.3 — matz@... (Yukihiro Matsumoto) 1999/12/07

まつもと ゆきひろです

[#8645] urllib and httplib — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

47 messages 1999/12/14
[#8646] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/14

なひです.

[#8653] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/14

まつもと ゆきひろです

[#8656] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/15

なひです.

[#8659] Re: urllib and httplib — Wakou Aoyama <wakou@...> 1999/12/15

青山です。

[#8685] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/21

なひです.

[#8687] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/21

高橋征義です。

[#8690] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/21

まつもと ゆきひろです

[#8717] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/24

高橋征義です。

[#8963] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/01/19

なひです.

[#8650] [PATCH] Ruby/Tk — Koji Arai <JCA02266@...>

新井です。

20 messages 1999/12/14
[#8651] Re: [PATCH] Ruby/Tk — Koji Arai <JCA02266@...> 1999/12/14

新井です。

[#8692] [win] dir name — KANEKO Naoshi <wbs01621@...>

金子です。

22 messages 1999/12/21
[#8695] Re: [win] dir name — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/12/22

小田@QNES です。

[#8741] Re: [ruby-list:19945] Re: array + empty string — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/12/27
[#8743] Re: [ruby-list:19945] Re: array + empty string — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...>

西@九大です。

64 messages 1999/12/27
[#8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8748] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/28

西@九大です。

[#8751] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8767] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/29

西@九大です。

[#8777] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/30

まつもと ゆきひろです

[#8791] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Minero Aoki <aamine@...> 1999/12/31

あおきです。

[#8792] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/31

まつもと ゆきひろです

[#8793] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — ARIMA Yasuhiro <fit0298@...> 1999/12/31

有馬です。

[#8795] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 1999/12/31

 knuです。

[#8798] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 2000/01/01

まつもと ゆきひろです

[#8811] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 2000/01/03

 knuです。

[ruby-dev:8511] Re: [REQ] {enumerable, integer, range}.rand

From: matz@... (Yukihiro Matsumoto)
Date: 1999-12-02 15:33:35 UTC
List: ruby-dev #8511
まつもと ゆきひろです

In message "[ruby-dev:8494] Re: [REQ] {enumerable, integer, range}.rand"
    on 99/12/02, Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp> writes:

|簡単に言えば、Kernel#rand と切り離して考えるつもりだったが、Array#rand 
|内で乱数に関する実装を行わない以上、無関係ではありえないと気付いた。な
|らば、やはり rand は kernel が持つべきである。

これは私とは違う結論ですね。私は「乱数の発生と違って、『要素
のランダムな選択』は要素を含むコレクションオブジェクトと不可
分である。よって実装するならコレクションオブジェクトのメソッ
ドであるべきである」というのが私の結論です。よって rand を
overload する方法には賛成しません。

更に overload するということは、内部的に「型による分岐」が発
生するわけで、将来の多様性を制限しないということを考えると、

  Kernel#rand(Numeric/Range/Array)

という選択はあまり得策ではないように思います。基本的に言語自
身がそれをサポートしない限り、型によるoverloadはダブルディス
パッチで実現できない限り OO 的に望ましい結果にはならないよう
に思います。

|From: matz@netlab.co.jp (Yukihiro Matsumoto)
|> 前述のようにrandはrand(3)を強く連想させるので、「enumerable
|> の要素一つをランダムに得る」という挙動は、名前として不適切で
|> しょうし、
|
|なぜ、「rand は rand(3)を強く連想させる」事が、後半の否定に繋がるので
|すか?「rand(xxx) に、乱数と全く無関係の動作を行わせる」(例えば、xxx 
|を表示する)という話であれば不適切ですが、ここでは逆に rand がランダム
|を想起させるのでよいと思います。
|
|あくまで、rand/random が意味するのは本質的には「ランダム」であり、unix 
|の影響や C言語の関数といった歴史的経緯により「乱数」を連想させているに
|過ぎません。それも、(引数の型という)技術的な問題から「ランダム」の対象
|が「数」に制限されているだけで、本来はその制限は不要だと考えます。

# ディベートですか? 受けてたちます。^^;;;

あくまで、rand/random が意味するのは本質的には「ランダム」で
あり、それ以上の意味ではありません。これが関数として用いられ
るときには単なる「ランダム」ではなく「乱数」として認識される
(認識することを期待している)のは、Rubyの根底に流れるUNIXとい
うバックグラウンドがあるからです。

一方、メソッドとして rand が使われた場合、これは関数的に用い
られていませんから、直接はrand(3)に拘泥されませんが、

  * rand(3)を想起させるため、乱数を強く連想させる(randomの方
    は単なる英単語なのでこの問題はない)

  * rand/randomには「ランダム」という意味しかなく(形容詞)、
    
        array.rand
        array.random

    という「名前」から得られるものは「『配列』が『ランダム』
    である(or にする)」ということだけです。これの機能は

        * 要素をランダムに選択する
        * 要素をランダムに並べ替える
        * 要素をseedに乱数を返す
        * 要素がどのくらいランダムか数値化して返す
        * 要素を乱数で置き換える

    のいずれの(あるいはもっと別の)意味であるかをそれだけでは
    決められません。あまたの解釈の中からひとつに決定させるに
    は名前に決定力不足だと感じます。

おっと、Array#random は引っ込めたんでしたね。

で、Kernel#rand(Numeric/Range/Array) については上述の理由で
賛成しません。

|私の立場的には、「rand は『乱数を返す』と思う」という人は放っておけば
|よい、そのままで生活しても問題ないので。で、使いたい人は「乱数」以外の
|使い方もできるというのがよい、です。前者が後者の使い方を見たときに「暗
|号」に見える、という心配も考慮しないといけないんでしょうか?

そのこと、そのものには反対しません。

|引数が Numeric であれば、(0...numeric) だと判断し、引数のオブジェクト
|が表現する要素群の中から、1つの要素をランダムに選択し、返す。
|
|でどうでしょうか?

「引数が型xxxであれば」という節を含む意味付けは大抵の場合望
ましくないです。もちろん、Rubyにはそういう望ましくない意味付
けが既にいくつもいくつもあるのは確かですが、ここでは棚に上げ
ておきます。
                                まつもと ゆきひろ /:|)

In This Thread