[#8257] Re: Smalltalk [Re: design patterns] — 助田 雅紀 <masaki.suketa@...>

助田です。

11 messages 1998/06/09
[#8259] Re: Smalltalk [Re: design patterns] — KIMURA Koichi <kkimura@...> 1998/06/10

[#8262] TkGrid do not exist? — Hiramatu Yoshifumi <hiramatu@...>

平松です。

26 messages 1998/06/10
[#8266] Re: TkGrid do not exist? — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#8269] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8271] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8375] new MethodIndex — keiju@... (Keiju ISHITSUKA)

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

21 messages 1998/06/16
[#8447] new MethodIndex — TEI meiki <tei@...> 1998/06/20

こんにちは、鄭です。

[#8448] new MethodIndex — TEI meiki <tei@...> 1998/06/20

再び、鄭です。_o_

[#8418] how to use delegate — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 1998/06/18
[#8419] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8420] Re: how to use delegate — gotoken@... (GOTO Kentaro) 1998/06/19

ごとけんです

[#8421] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8521] hash sort — "Kazuhiro Yoshida" <s95l980@...>

もりきゅうです。

34 messages 1998/06/26
[#8523] hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8533] Re: hash sort — WATANABE Hirofumi <watanabe@...> 1998/06/26

わたなべです.

[#8534] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8536] Re: hash sort — Sinichiro Dezawa <dezawa@...> 1998/06/26

出沢です

[#8538] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8539] Re: hash sort — TAKAHASHI Masayoshi <maki@...> 1998/06/26

高橋です。

[#8541] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8546] Re: hash sort — Tadayoshi Funaba <tadf@...> 1998/06/26

ふなばです。

[ruby-list:8573] Re: hash sort

From: Tadayoshi Funaba <tadf@...>
Date: 1998-06-28 17:51:10 UTC
List: ruby-list #8573
ふなばです。

僕はかなりあやしいでしょう。たまたま縁があって、この話題には関心がある
んで発言してますが、まつもとさんや石塚さんみたいにホントにわかってるひ
とはわらってるかも。

>つまり nonzero? を使う/使わないという問題とは関係なく
>Array#<=> は辞書式のような階層的順序が仮定されてるので、
>そーゆー階層を導入しにくい場合ですね。

それは全くその通りだと思います。もちろん、Array#<=> があれば、どんな問
題も解決できるといっているわけではなくて、Array#<=> の存在を前堤に、
nonzero?  が存在しつづける本質的な意義があるのかどうかに興味があるので
す (もちろん、本質的な意義がないとしても、あっていいし、つかってもいい)。
なにか、nonzero? よりも劣るところがあるのか、そこが知りたいんですね。

>さらに上の例だと最終的に何らかの <=> で解決してますが、
><=> を実装してない場合は nonzero? を使ってその場限りの
><=> をブロックに書き込むのは理にかなってると思います。

じつは <=> があるかどうかは問題の本質的でないように思います。 なんとい
えばいいのか、比較の対象っていうのか、それがハッキリしているかどうか、
そこが問題のような気がします。

nonzero?  は or を活かすための方便としてあって、結びついて nonzero? or
となって意義があるわけで、それ故にその表現力は限られた場面でしか発揮で
きないようになっていると思います。

    (a0 <=> b0).nonzero? or ... aN <=> bN

は

    [a0...aN] <=> [b0...bN]

と簡単に言い換えることができるみたいです。そうであれば、比較の対象がボ
ケてしまう nonzero? or はあまりオススメできないように思うわけです。

>てゆーか、array.c をみたけど Array#<=> の実装自体が
>まさに nonzero? 相当のことをやってるわけだし。

うーん、そうだといいたいですが、ここで nonzero? は or と結びつかないと
存在意義がないようなもので、ループをつかうなら nonzero? はいらないので
す。e0.nonzero? or e1.nonzeoro? or ...  と並べるときに意味がある。しか
も、数個程度ならいいけど、それ以上は現実的でない。書きづらいし、読みづ
らいし、遅いです。

自分でいってしまいますが、Array#<=> で懸念されるのは、 or による評価の
打ち切りがないので、無用な評価があるかもしれないということじゃないでしょ
うか (もちろん、 比較の打ち切りはある)。重いメソッド呼びだしなどがあっ
たらどうなのか。

    (0 <=> 1).nonzero? or (sleep 10) <=> (sleep 10)

は

    [0, (sleep 10)] <=> [1, (sleep 10)]

と決定的に違うということになります。

こういうときは要素を  call する <=> をあらたに用意し、要素はあらかじめ
proc 化しておけばいいのです (自前で遅延評価まがいのことをする)、という
のは冗談ですけど、どうしてもそれが必要だっていうのなら、なにかを諦めな
ければならないのかなあ。でも、そんなに問題なることはないだろうと思って
います。やはり肝心なのはソートでしょうが、ソートにおいてそのように問題
になることがあるとすれば、そのこと自体がちょっとおかしいことのように思
えるんですが、いかがでしょう。

というわけで、nonzero? or をつかっちゃいけないってことはないんですけど、
やっぱり、とにくオススメできる理由もないように思えます。

># いや、こんなに議論始めるつもりはなかったんです。
># つき合ってくれてどうもです。

いえいえ、僕のほうこそ、つきあわせてしまったようで、ありがとうございま
す。

# これは nonzero? をだしたことについての反省文なのだろうか?
# しかし、眠い。また、ボケたこと書いてなければいいけど...

--Tadayoshi Funaba

In This Thread