[#8168] {literal}#[]= — EGUCHI Osamu <eguchi@...>

えぐち@エスアンドイーです。

16 messages 1999/11/01
[#8172] Re: {literal}#[]= — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8176] Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

35 messages 1999/11/01
[#8178] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/01

まつもと ゆきひろです

[#8212] Re: Multiple self assignment — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/02

もりきゅうです。

[#8213] Re: Multiple self assignment — matz@... (Yukihiro Matsumoto) 1999/11/03

まつもと ゆきひろです

[#8232] 例外を処理する 2 項演算子 — Kazunori NISHI <kazunori@...> 1999/11/05

西@九大です。

[#8233] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/05

まつもと ゆきひろです

[#8236] Re: 例外を処理する 2 項演算子 — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/05

もりきゅうです。

[#8266] Re: 例外を処理する 2 項演算子 — EGUCHI Osamu <eguchi@...> 1999/11/07

えぐち@エスアンドイー です。

[#8269] Re: 例外を処理する 2 項演算子 — gotoken@... (GOTO Kentaro) 1999/11/07

In message "[ruby-dev:8266] Re: 例外を処理する 2 項演算子"

[#8271] Re: 例外を処理する 2 項演算子 — matz@... (Yukihiro Matsumoto) 1999/11/08

まつもと ゆきひろです

[#8274] Re: 例外を処理する 2 項演算子 — keiju@... (石塚圭樹) 1999/11/08

けいじゅ@日本ラショナルソフトウェアです.

[#8204] Re: [ruby-list:18281] Re: アクセス制御について — Shugo Maeda <shugo@...>

前田です。

12 messages 1999/11/02
[#8205] Re: [ruby-list:18281] Re: アクセス制御について — Shin-ichiro Hara <sinara@...> 1999/11/02

原です。

[#8315] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/15
[#8316] Re: [ruby-list:18601] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/15

まつもと ゆきひろです

[#8369] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/18

新井です。

[#8374] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — matz@... (Yukihiro Matsumoto) 1999/11/18

まつもと ゆきひろです

[#8384] Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{} — Koji Arai <JCA02266@...> 1999/11/19

新井です。

[#8405] 1.4.3 (Re: Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{}) — matz@... (Yukihiro Matsumoto) 1999/11/24

[#8319] Re: Exception handling — Jun Adachi <adachi@...>

安達@沖データと申します。

21 messages 1999/11/16
[#8350] Re: Exception handling — Kazunori NISHI <kazunori@...> 1999/11/17

西@九大です。

[#8446] [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...>

西@九大です。

37 messages 1999/11/29
[#8449] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/11/30

まつもと ゆきひろです

[#8463] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/11/30

西@九大です。

[#8474] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/01

まつもと ゆきひろです

[#8476] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/01

西@九大です。

[#8487] Re: [REQ] {enumerable, integer, range}.rand — matz@... (Yukihiro Matsumoto) 1999/12/02

まつもと ゆきひろです

[#8494] Re: [REQ] {enumerable, integer, range}.rand — Kazunori NISHI <kazunori@...> 1999/12/02

西@九大です。

[#8451] new Hash (Re: [ruby-list:19043]) — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/11/30

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

From: Kazunori NISHI <kazunori@...>
Date: 1999-11-30 19:51:00 UTC
List: ruby-dev #8463
西@九大です。

From: matz@netlab.co.jp (Yukihiro Matsumoto)
> でも、それって rand ではなく、shuffleとかrandomizeではないで
> すかねえ。

それは、「名前」的な問題(Kernel#rand と名前が衝突しているから)ですか?
それとも「機能」的な問題(要素を全部入れ変えた方が汎用的)ですか?

提案された名前から、前者ではないと思いますが。(前者はむしろ肯定したい、
という気持ちは後述)。で、後者だとしても

  * (! だとすると) self 自身の順序は保ちたい
  * (! でなければ) shuffle.shift などは高価過ぎる

という理由から、rand でいいと思います。あくまで rand(array[array.size])
と等機能のメソッドを意図してます。これとは別に、shuffle(!)/randomize(!)
もあってよいと思います。

>   (1) 名前が適切ならば採用か。ただし、EnumerableかArrayかは
>       まだ考慮の余地あり。

上の理由から、Enumerable#rand でよいと思います。(Kernel#rand との衝突
を問題にしているのであれば、Enumerable#random でも)

多分、Enumerable と Array の選択は、shuffle/randomize を想定した時に起
きる問題だと思います。確かにその場合は、Enumerable(Set?) が順序を持つ?
元から乱数的では?という疑問があります。(そこには触れたくないらしい)

>   (2) 「ある範囲の乱数」は欲しいかも。インタフェースは考慮の
>       余地あり。

これは、ごとけんさんの rand(range) 案に賛成です。でも range オブジェク
トを生成するコストは無視していいんですかね?(ここらへんの実装上のコス
トは想像つかないらしい)。で、いっそ rand(Numeric/Range/Enumerable) に
してもいい気がしてます。

>   (3) 整数のメソッドとしてはやや不適切な臭いが。

私もこれはやり過ぎだと思いますが、ちょっと抵抗してみます。(暇なのか?)

オブジェクト指向において、10.print 等は両者に相関性が無い事から不自然
ですが、10.rand, 10.sin などは自然で、(OO的には)むしろ本来のあるべき姿
だと思います。これは、

    rand や sin という機能には数(Numeric)が不可欠であり、その「数」が
    それらの機能を持つ(メソッドを持つ)のは自然である。

と考えるからです。しかし、人間の思考においては、特に sin 等は、これま
での(その人の)経験から、「数学」での考え方(表記法)に従う方が可読性が高
い為に、ruby では数学の関数的な表現法をとっている。。。
#個人的には、この前向きな妥協が、Smalltalk より Ruby が好きな点です

私はこういう捉え方だったので、なぜ rand(10) だけ残って 10.rand がない
んだろう、という疑問が湧きました。確かにあっても(私も)使わないでしょう
が、そういう流れであれば、残っているべきではないのか?と。

でも、そういう流れじゃないんですよね、多分。(抵抗して自己解決する奴)。
ていうか、Math.sin(10) じゃないとエラーになるし。(sin(10) が通ると思っ
てた人の言い分)

rand も、元はシステムコール(カーネル/OS)に依存するから Kernel.rand(10) 
であり、「そこらへんは冗長だからもういいよね。もっと気軽に行こうよ」的
思想から、rand となった。という経緯だと推測しています。

------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori@swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------
#「第2話、10.print は悪か?」に続く..

In This Thread