[#3747] constants (or class vriable?) — Wakou Aoyama <wakou@...>

青山です。

20 messages 1998/12/06
[#3751] Re: constants (or class vriable?) — Shin-ichro Hara <sinara@...> 1998/12/07

原です。

[#3763] Re: constants (or class vriable?) — Wakou Aoyama <wakou@...> 1998/12/07

青山です。

[#3764] Re: constants (or class vriable?) — matz@... (Yukihiro Matsumoto) 1998/12/08

まつもと ゆきひろです

[#3767] Re: constants (or class vriable?) — kjana@... (YANAGAWA Kazuhisa) 1998/12/08

In message <199812080034.JAA05946@picachu.netlab.co.jp>

[#3826] ruby 1.1d0 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 1998/12/16

[#3873] (?: ) does not work? — shugo@... (MAEDA Shugo)

前田です。

15 messages 1998/12/19

[#3881] I want to catch all jump — shugo@... (Shugo Maeda)

前田です。

17 messages 1998/12/21
[#3895] Re: I want to catch all jump — matz@... (Yukihiro Matsumoto) 1998/12/22

まつもと ゆきひろです

[#3894] ruby 1.1d1 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/12/22

[#3899] interpreter reinitialization — shugo@... (Shugo Maeda)

前田です。

22 messages 1998/12/22
[#3923] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/23

まつもと ゆきひろです

[#3926] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/23

前田です。

[#3931] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#3956] Re: interpreter reinitialization — shugo@... (Shugo Maeda) 1998/12/24

前田です。

[#3960] Re: interpreter reinitialization — matz@... (Yukihiro Matsumoto) 1998/12/24

まつもと ゆきひろです

[#4002] config.guess — Koji Arai <JCA02266@...>

新井です。

24 messages 1998/12/26
[#4039] Re: config.guess — matz@... (Yukihiro Matsumoto) 1998/12/29

まつもと ゆきひろです

[#4045] Re: config.guess — Koji Arai <JCA02266@...> 1998/12/31

新井です。

[#4047] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/01

まつもと ゆきひろです

[#4048] Re: config.guess — Koji Arai <JCA02266@...> 1999/01/01

新井です。

[#4049] Re: config.guess — matz@... (Yukihiro Matsumoto) 1999/01/02

まつもと ゆきひろです

[#4050] Re: config.guess — Motoyuki Kasahara <m-kasahr@...> 1999/01/04

笠原です。

[#4030] module Precision — gotoken@... (GOTO Kentaro)

ごとけんです

78 messages 1998/12/28
[#4310] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4311] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/21

まつもと ゆきひろです

[#4312] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/21

ごとけんです

[#4317] Re: module Precision — keiju@... (石塚圭樹 ) 1999/01/21

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

[#4364] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/25

ごとけんです

[#4478] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/01/28

まつもと ゆきひろです

[#4506] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/01/30

ごとけんです

[#4552] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/01

まつもと ゆきひろです

[#4557] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/01

ごとけんです

[#4632] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4647] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/03

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

[#4648] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4633] Re: module Precision — matz@... (Yukihiro Matsumoto) 1999/02/03

まつもと ゆきひろです

[#4636] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/03

ごとけんです

[#4836] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4843] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/08

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

[#4849] Re: module Precision — gotoken@... (GOTO Kentaro) 1999/02/08

ごとけんです

[#4924] Re: module Precision — keiju@... (石塚圭樹 ) 1999/02/09

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

[#4976] a genericity — gotoken@... (GOTO Kentaro) 1999/02/10

ごとけんです

[#5008] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/11

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

[#5018] Re: a genericity — gotoken@... (GOTO Kentaro) 1999/02/11

ごとけんです

[#5171] Re: a genericity — keiju@... (石塚圭樹 ) 1999/02/16

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

[ruby-dev:3789] Re: List()

From: MAEDA Shugo <shugo@...>
Date: 1998-12-10 09:17:20 UTC
List: ruby-dev #3789
前田です。

In message "[ruby-dev:3788] Re: List()"
    on Thu, 10 Dec 1998 02:56:40 +0900,
Shin-ichro Hara <sinara@blade.nagaokaut.ac.jp> wrote:

> |原> でもせっかくのアイデアなのにケチつける?:-)
> |
> |ケチをつけるというわけではないのですが、
> 
> いえ、せっかくのアイデアというのは x,y=[1,2] #=> x=1; y=2 とい
> うまつもとさんのアイデアのことで、私の *x= のアイデアであ、じゃ
> なかった、では、ないです。私のは十分にケチをつけてもらわないと。
> (^^;

あ、すみません、読み違えてました(^^;


> |...やはり配列とリストを
> |区別する/しない、というのは、どちらかに統一すべきような気が
> |しています。
> |
> |each_with_indexを
> |
> |    def each_with_index
> |      i = 0
> |      each { |*x|
> |        yield(*(x + i))
> |        i += 1
> |      }
> |    end
> |
> |のようにパラメータを展開して渡すようにしたとします。
> |
> |とすると、現状のHash#eachではyield([key, val])としている
> |わけですが、...
> 
> そうですね。多分現状はyield(key, val)と書かれていると考え
> ていいと思いますが、もし私の案が仕様になれば、以前と同じ
> 動作をさせるためにはyield([key, val])と書き直さなければな
> らないです。

いや現状では配列を生成してからyieldに渡しているので、
yield([key, val])と考えるべきだと思います。
# Listが導入されたらassoc_new()を書き換えればよいので
# yield(key, val)への変更は容易だと思いますが。

> |...これは[key, val]という一つの値を渡している
> |わけではなくて、key, valという二つの値を渡すことを意図
> |しているわけですから、
> 
> 意図はそうですね。配列を渡したいわけではなく、2つの
> 値を渡したいんですね。それが出来ないので配列を「利用」
> しているだけですね。

というよりも現在の仕様では、yieldには値の配列を渡す、という
のが基本になっている訳ですよね。

> |{"key"=>"val"}.each_with_index {|key, val, i|
> |  p key #=> "key"
> |  p val #=> "val"
> |  p i   #=> 0
> |}
> |
> |となる方が、
> |
> |{"key"=>"val"}.each_with_index {|key, val, i|
> |  p key #=> ["key", "val"]
> |  p val #=> 0
> |  p i   #=> nil
> |}
> |
> |よりも自然だと思います。
> 
> 私も前者の方が自然だと思います。しかし現在の動作は後者である。
> そして、将来も互換性を保つためにそれを守る事になると思います。

僕が先のメールで示したeach_with_indexでは、Hash#eachで
yield([key, val])としても、yield(key, val)としても、現在の仕様では
前者の動作になりますよね?
逆に原さんの提案が採用されるとyield([key, val])の場合は後者の動作に
ると思います。

> なぜ後者が現在の仕様であるかというと、それは現在の yield の仕
> 様ではそれが最も実装がシンプルだからですね。(私の案が採用され
> れば前者も同じぐらい実装はシンプルになります。)

これはeach_with_indexの仕様をどうするべきかという話で、
yieldの値の渡し方の話とは別なのではないでしょうか。
現在の仕様でも先の例の前者の挙動にしたければ、先のメール
のようにeach_with_indexを変更すれば良いわけですし。

> ここまではほぼ完全に同意できるわけですが、

というわけで、まだ合意に至ってないようですね。

> ここが良く分からないです。分からないからちゃんと返答できなくて、
> 一方的に自分の意見を述べてそちらが私が何が分からないのか汲んで
> くれる事を期待することになるわけ(^^; ですが 、、、

なんとなく意見の違いがわかったような気がします。

> 私の案が仕様になった場合は、配列を渡したい時は yield に配列を
> 渡し、複数の値を渡したい時は yield にリストを渡します。それが
> プログラミングの作法となるわけで、自然な作法だと思います。で、
> それはどちらであっても多くの場合同じ効果しか生まないのですが、
> たまに (新しい)each_with_index の様に差が出るわけです。
> 
> 現在までに書かれているイテレータ定義の多くはそれを区別しない
> で書かれていて、その意図がどちらであるのかイテレータの利用者
> は分かりません。本来はイテレータの作者に新しい仕様向けに書き
> 直してもらわないといけないわけです。書き直してもらうと、いい
> こと(利用者の料理のレパートリーが増えるということ)があるわけ
> です。

原さんの意見は、今回の仕様変更で実際には|*x|の挙動がかわるだけ
だが、モデル的には、yieldからapply的な意味(こちらが歴史的には
本来の意味なのですが)を排除して、funcall的な意味に限定しよう、
ということですね。

僕が考えていたのは、基本的に配列とリストを区別しないというモデル
が前提で|*x|の時だけ区別することになると、yield([1, 2])として複数の
値を渡すつもりだった人にとっては、上のeach_with_indexのような
場合に挙動が変わってきて困惑することになるし、逆に受け取る方として
はリストではなく配列を受け取ったとしても、yieldした側が複数の値と
して渡したかったのかもしれないというリスクがつきまとってしまう
ということです。

原さんのように配列を複数の値として渡せるのは互換性のためだけだと
して、yieldで配列を渡しても複数の値と解釈されない場合があること
を仕様で明示して、そのような動作を期待してはいけないことにすれば
問題ないと思いますが、そうすると配列で複数の値を渡せるという面
は、メリットというよりデメリットになりますね。
少なくとも標準ライブラリについては、配列で複数の値を渡すことを
期待したコードをすべて書き直す必要があるように思います。

> 将来「なぜ each_with_index のブロックパラメータは x, y, i を
> 出さずに [x, y], i を出して来るの?」という質問が出ると思いま
> すが、それは歴的事情だと説明する事になるでしょう。

これはまた別の理由があったのではないでしょうか?
# 前に議論があったような気がするんですが忘れてしまいました。
現状のモデルを変更しないとしても、each_with_indexの変更は
できますよね?

> |まつもとさんのご指摘のように哲学科なのですけどよいですか? (^^;
> 
> 前田さんがフランス哲学なのは前の第-1回 Ruby Conference で知っ
> ています。

あ、覚えててくださっていたのですか。
ありがとうございます:-)

> |「システムにとって意図とは何か」という題目で、ルーマンの社会
> |システム理論とアンスコムやデイヴィドソンの行為論を扱っています。
> 
> それって仏哲ですか?アメリカの社会学の様な感じ。:-)

なので仏哲専門の先生から指導教官が変わってしまいました(^^;

> 「システムにとって意図とは何か」うーむ興味深い。次の Conference
> では是非ご高説を賜わりたいです。(^^

いやいや、とんでもないです(^^;;;
# そういえばまつもとさんが京都にくるのはいつでしたっけ。

---
前田 修吾

In This Thread