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

From: Kazunori NISHI <kazunori@...>
Date: 1999-12-06 02:34:52 UTC
List: ruby-dev #8537
西@九大です。

From: matz@netlab.co.jp (Yukihiro Matsumoto)
> これは私とは違う結論ですね。私は「乱数の発生と違って、『要素
> のランダムな選択』は要素を含むコレクションオブジェクトと不可
> 分である。よって実装するならコレクションオブジェクトのメソッ
> ドであるべきである」というのが私の結論です。

その「ランダムな選択」と「ランダム性の発生源」(現時点では乱数)との関係
も不可分ですから、どちらが「より結び付きが強いか」という問題ですよね。
多分、どちらに意識を置くかの違いで、優劣は無いと思います。

  * array(例えば)に対して、「ランダムな選択」を要求。
    (実装上は、array 内部で「ランダム性の発生源」を呼ぶ)

  * ランダム性の発生源に対して、「この中から選んで」と要求。
    (実装上は、double dispatchで自分に戻ってくる)

# 後者は、例えば、機能や性能の違う複数の random generator の存在を意識
# したもので、現在の Ruby には適合しないかもしれない

> 身がそれをサポートしない限り、型によるoverloadはダブルディス
> パッチで実現できない限り OO 的に望ましい結果にはならないよう

同意します。私も実装上は double dispatch で行い、それ(random)を言語側
が組み込みで定義しておくものが Numeric/Range/Array、というのが本意です。
表現が足りませんでした、すいません。

で、質問なんですが、overload の具体的実現手段の1つとして double
dispatch があると理解していたのですが、これは正しいですか?

あと、ruby の組み込み関数(C言語?)で、double dispatch を実現する、とい
うのは難しかったりしますか?(ruby 等なら楽に書けるのはわかるのですが)

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

いや、勝ち負けにこだわっている訳じゃないです。単に負けると悔しいだけで
す。(こだわってる)。ていうか、既に、興味の対象は既にまつもとさんの返事
(反論)に移ってたりして。。。こ、これが恋?

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

はい。これまでの話を全て忘れて「array.random」を見直してみると、第一感
は「array.randomize!」な気がしてしまいました。確かに決定力不足ですね。
やっと、まつもとさんの「第一反駁」が理解できました。これが、常に懸念さ
れている「名前の問題」の本質ですか?

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

ふふふ。必要とあらば、再提出しましょう。(磨きがかかったコウモリ)。
という事で、double dispatch 的には、やはり出さねばなりますまい。。。
(てことは、どうも最初は単なる overload を意図してたぽい)

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

「名前が不適切」というのは理解できました。代案は見つかりませんが、強い
て書くなら random_get になりそうな。でも、それじゃつまらない(未定義語)。
どちらにしろ、これは解決可能な問題なので置いておくとして。

結局、Kernel#rand に賛成できない理由は何ですか?(反論付き肯定側最終弁
論堂々巡りバージョン'99師走)

  (1) 関数(rand)内で型に拘束されるのが嫌だから(拡張性がない)。
      ⇒ 実装は double dispatch で。関数(rand)はその統一的な窓口として。
         (よいなら、後は「名前の問題」だけ)
  (2) そもそも UNIX的に、rand は乱数を連想...
      ⇒ 上位互換だからいーじゃん!(感情論)
         (ダメなら、御破算)

これでどうでしょう。これでダメならもう僕は鳥になる。。。(なれよ)

------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori@swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------

In This Thread