From: Kazunori NISHI Date: 1999-12-01T13:53:56+09:00 Subject: [ruby-dev:8476] Re: [REQ] {enumerable, integer, range}.rand 西@九大です。 From: matz@netlab.co.jp (Yukihiro Matsumoto) > 意図をできるだけ汲むと、結局array[rand(array.size)]相当の > random が求められていて、かつ内容をまぜてしまう randomize, > shuffleもあっても良いという話なんですかね。 はい、そうです。randomize/shuffle はどうでもいいです(失礼)。ていうか、 どの程度の randomize にするかが難しそうなので。 > を見ても分かる通り、このメソッドはeachだけでは定義できません。 > ですから、Enumerableに含まれる第1要件を満たしていません。 わたくし、Enumerable を誤解しておりました。単に「繰り返しを行うクラス の支援」であり、each を備えているだけなんですね。Enumerable == Set で あるといつの間にか思い込んでいました。混乱させて申し訳ありません。 > それなりに嬉しい局面も少なそうです。よってArrayに定義するこ > とを推します。 はい。納得しました。Array#random で十分です。 > りません。なんだかプログラムの先頭に ... > と3行追加することで十分のような気がします。 これなんですが、私は「それなりに利用価値があって、機能と名前が一致した メソッドは、できるだけ組み込みで定義して欲しい」派です。理由は、 * (適切な名前の)述語は多いほどよい。(と思っている) * メソッド数の増加によって実行コストが著しく高くなる事はない。(多分) * 例え、後から一行で定義できるものであっても、何十個となると面倒。 * その場合、require 'my_methods' でもいいが、使わないものまで評価さ れると悔しい(無駄に遅そう)。 * 自作のライブラリを配布する事を考えると、既存のクラスにあまり手を入 れたくない。(同じような他のライブラリとの conflict が恐い) です。逆に、まつもとさんは「組み込みの定義は少ない方がよい」と考えられ ている気がするのですが、もしそうであれば、その理由は何なのでしょうか? > * もう一段説得されるまでなにもしない %w(説得できる? 説得できない? 無理っぽい?).random と書きたい衝動にかられないでしょうか?それとも、あくまでも、毎回定義す る、もしくは一度テンポラリ変数の配列を用意して、size を添字にして、、、 #うぅ、お遊びプログラムをよく書くかどうか、の違いな気がしてきたらしい > rand(Numeric/Range)はともかく、rand(Enumerable)ってどんな挙 > 動をするんですか? これは先程述べた「Set と誤解」があるので、正しくは rand(Array) の事で、 「その要素の中からランダムに1つの要素を取り出す」を意図していました。 ていうか、「rand」=「ランダムに生成する」もひょっとして思い込みですか? こう思っていたので、rand(Array)/Array#rand も共に自然だったのですが。 > します。(2)についてですが、randでは「乱数を返す」と思われそ > うなのでやめた方が良さそうです。 なんか、rand 自身に「ランダムな*数*を生成する」という意味が含まれてい る気がしてきました。うう、その場合、確かに私の発言は意味不明ですね。。。 ------------------------------------------------------------------ 九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年 西 和則 ( e-mail: kazunori@swlab.csce.kyushu-u.ac.jp ) ------------------------------------------------------------------