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

From: Kazunori NISHI <kazunori@...>
Date: 1999-12-13 22:34:29 UTC
List: ruby-dev #8643
西@九大です。
#引用の順番は変更してます。

From: matz@netlab.co.jp (Yukihiro Matsumoto)
> |  * Kernel#rand(min..max)/(min, max)?   ⇒ よさそう
...
> 最初のはまだ私の中で結論出てません。

確かに。「rand(3C) を連想するから」という理由で納得しているので、もし
「それ以外の使い方(引数)」を認めるなら、何でも認めて欲しいところです。
多分、またギャーギャー言い出すでしょう。でも、最悪、それだけでも欲しい、
とか思ってたりもします。(今日のジレンマ)

> ではありません。関数的に見えた方が自然なものは関数的に見えた
> 方が良く、メソッド的に見えた方が自然なものはメソッド的に見え
> た方が良いというのが私の一貫したスタンス(のつもり)です。

これが見えていませんでした。こういうスタンスなら、まつもとさんが納得さ
れない理由もわかります。今迄の議論が軽く吹き飛ぶくらい、全てが一気に理
解(納得)できました。(説得できないであろう事も)。あまりにあっけなかった
ので、返事を忘れてました。。。(遅レスの精一杯の言い訳)

ていうか、それ(スタンス)自身には納得してませんが、それはスタイルや信念
みたいなものなので、人それぞれという事で問題ないです。はい。

> (概念としての)ある処理をまとめる方法は、オブジェクト指向言語
> にはダイナミックバインディングがあります。つまり、おなじメソッ
> ド名と引数パターンを持つメソッドは、それらが別々のクラスで定

要するに「single dispatch」ですね。はい。

> double dispatchは「メソッドはひとつのオブジェクト(レシーバ) 
> によって選択されるが、ふたつの(かなり無理すれば複数)のオブジェ

はい。本質的ではないですが、「double」だけに2つかも。「multiple
dispatch」という言葉は一般的ですか?

> ですが、「統一的に受ける窓口」とはなんで、なんのためであろう
> かという疑問が残ります。

哲学的ですね。という事は、最後はまた「スタンス(ポリシー)」という話にな
りそうですが、自分の立場を明確にする為にお答えしましょう(土台固め)。て
いうか、今迄の議論における意見の相違はそこにあったので。

何の為か?「愛と平和の為」。何なのか?「その実現手段の1つ」です。(よく
わかってないらしい)。はい、ちょっと抽象的で難しいです。

「プログラミング」という領域で答えるならば、「従来のプログラミングにお
ける(本来は不要な)制限である、名前空間の汚染問題を解消する手段」ぐらい
でしょうか。

これになぞって今迄の話をまとめると、従来のプログラミングパラダイムには、

get_random_integer(integer)
get_random_value_from_range(range)
get_random_value_from_collection(collection)

という「名前空間の汚染」があり、それに起因する「ユーザへの負荷」(関数
名を多く覚える必要がある)もあるので、普通はやってられない。(OO な人の
言い分)。で、それを解決する手段として、

  [1] single dispatch でいいじゃん。(まつもとさん)
      (integer/range/collection)#get_random_value

  [2] double dispatch でもいいじゃん。(情緒不安定な人)
      Kernel#rand(integer/range/collection)

  [3] どっちでもいいじゃん。(多くの ruby-dev な人)

がある訳ですね。確かに上の問題は [1]で解決されてます。で、[2]にする必
要はないのでは?果たして「統一的な窓口(rand)」は必要なのか?ていうか、
それって何?存在意義は?というのが先の質問ですね。そして、

> しかし、今回は別に乱数発生源とcollectionを組み合わせて選択す
> るというニーズが存在しないので、わざわざdouble dispatchを選
> 択する理由も、そのためのくくり(Kernel#rand)を導入する必然性
> もありません。

なんですね。はい、物凄く理解できます。でも、私は「double dispatch」と
は単にそういう「受け手の型が2つに増える(組み合わせられる)」だけでなく、
その「くくり」もメリットだと思うのです。これが選択する理由です。
#良い例が思いつかないので、間違ってるかも。。。(今日の弱気)

「導入する必然性」については、どこかの登山家ではないですが、「そこに
Kernel#rand があるから」です。「Kernel#get_random_value を新規作成して、
意地でも double dispatch」というのではないです。何かもったい気がするん
ですよね。せっかく「くくり(窓口)」はあるのに使っちゃダメ、みたいな。
便利なんだから、コンビニで住民票を取らせてよ、みたいな。

> さらに現在既にKernel#rand()は「1個の整数を引数にとる」という
> 仕様になっていますから(これを変えるつもりはない)、

がーん。そこまで言われたら、もうどーしよーもないです。でも、今迄の理由
から納得する事は十分にできますです。はい。

>   * 関数のように思えないものを関数的にする

rand(integer) が関数的に自然であるならば、rand(collection) も自然に感
じられるのですが。まあ、「自然=(その人にとって)自然」の法則ですけど。

> 反対の理由です。しかも、反対することによってかずのりさんから
> 楽しいフォローがいただけると言うオマケつき。

な、なんとー!あ、遊びだったのね。。。

> 「外見」からです。外見は重要です。

はい。「外見で人を判断するな」と言いますし(あれ?)。全く関係ないですが、
これと「怪しい人を見たら警察へ」は矛盾してると昔からよく思う。うん、こ
れだけ矛盾した世の中なんだし、Kernel#rand が何を受けとってもいーじゃん。
(最後の無駄な抵抗)

という事で、今のとこ、
  * Kernel#rand(xxx) ⇒ xxx は float も含む?min,max 指定はあり?
  * Array#random_get ⇒ 名前次第。(Array 以外に Range もあり?)
でしょうか。

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

In This Thread

Prev Next