[#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:8488] Re: [REQ] {enumerable, integer, range}.rand

From: matz@... (Yukihiro Matsumoto)
Date: 1999-12-02 03:25:39 UTC
List: ruby-dev #8488
まつもと ゆきひろです

In message "[ruby-dev:8477] Re: [REQ] {enumerable, integer, range}.rand"
    on 99/12/01, Koretsugu Daigoro <tmmcross@hk.airnet.ne.jp> writes:

|「rand だと乱数を返すと思われそう」というのはわかるんですが、
|なぜ「random だとそう思われない」のでしょうか?
|rand は random の省略だと思っていたのですが、
|もしかしてそうではない!?

えーと、UNIXの影響を強く受けていると公言しているRubyにおいて、
randomという英単語をrandと省略することはrand(3)を強く連想さ
せ、よって乱数を返すと思われそう、というのが趣旨だったんです
が、そういえば random(3) なんてのもありますね。

randにしてもrandomにしても「配列のいずれかの(ランダムな)要素
を返す」という挙動に対して適切な名前ではないことを認めざるを
得ないですね。

一方、randomize, shuffleにはそのような挙動と名前の解離は存在
しないように思われますが、そういうのが本当に必要かという疑問
には答えがないように思います。

|each で出来ないのはそのとおりなんですが、
|結果的に Enumerable なクラスでは同じ程度には有用なので、
|どうせ Range や Array で定義するんだったら、
|Enumerable でやってしまったほうがいいという考え方もできませんか?

んなことはないですよ。Enumerableってのは「順に要素が取り出せ
る」という意味しか無いんですから。

  class Random
    include Enumerable
    def initialize(max)
      @max = max
    end
    def each
      loop do
        rand(@max)
      end
    end
  end

とかね。

また、Enumerableでrandを実現するためには、一度全部の要素を配
列に変換する必要があり、効率の悪さ、繰り返しできない可能性な
どの要素を考えても賛成できません。

たとえば、

  f = open("/usr/dict/words")
  f.rand
  f.rand

としたらどうなると思いますか?

  words = open("/usr/dict/words").readlines
  words.rand
  words.rand

の方が良くないですか? (randという名前は別として)

|うーん、でもやっぱり組み込みにするなら、
|rand(enumerable) が妥当だと思うのです。
|(↑enumerable の要素一つをランダムに得る)

前述のようにrandはrand(3)を強く連想させるので、「enumerable
の要素一つをランダムに得る」という挙動は、名前として不適切で
しょうし、さらにEnumerable一般に「要素一つをランダムに得る」
という行為にも賛成できません。

# つまり名前の問題である、と。

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

In This Thread