From: takagi@... (TAKAGI, Hiromitsu) Date: 1999-04-10T05:22:46+09:00 Subject: [ruby-list:13568] Re: Ruby and LISP ( was Re: Ruby anywhere ) Shugo Maeda writes: > > > > > > 「式を評価した結果」である「値」も(オブジェクトへの)参照(「reference」) > > > > > ですよね。そして変数はそれを保持しているだけと。 > > > > > > というモデルに従うと、「1 + 2という式の値」と「7 - 4という式の値」 > > > は異なるということになりますよね。 > > > 私の感覚的には両者は同じものであって欲しいんですが、「すべての数 > > > 値は世界でただ一つしかないオブジェクト」という考え方にどっぷりつ > > > かっているせいかもしれません。 > > > > 仮に値(参照)が異なる (つまりオブジェクトが異なる) ものだったとしても、 > > そのオブジェクトが表現する内容が同一である ということでいいのでは > > ないかと。 > うーん、なぜ別々の式の値が等価であるだけでなく、同一のオブジェク > トであると考えてはいけないのでしょう。 : > 高木さんのおっしゃられるモデルでも問題ないと思うのですけど、(Ruby > においては)私の考えるモデルでも破綻はないのではないでしょうか。 : > 私の考えるモデルでもオブジェクトが等価であることと同一であること > は区別できると思いますけど、高木さんがそう思われないのはどういっ > た理由によるものでしょうか? 区別可能かといえば可能でしょうが、初学者がその区別に気づきやすいかどう かということなのですが、その前に、 > 更に言うと私の考えるモデルの方が単純なので初学者にはわかりやすい > と思います。 まず、少なくとも、 Rubyでは「等価」と「同一」の区別をする必要がほとんどない と言えればそうかもしれません。 で、考えてみたのですが、そうかもしれませんね。Rubyが、Javaと違って、 「==」という演算子を「等価」の方に割り当てたのは、「通常の一致比較」は、 「等価」の方で行う という方針なわけですね。 一般的に、「等価」で比較するのは「同一」で比較するより実行時間コストが 高いので、Javaでは「==」をコストの低い「同一」の方にしたのでしょうが、 Rubyの場合は、対象とするアプリケーションの性質などからして、その程度の コストは気にしないわけですね。 *** で、区別しやすいのか区別しにくいのかですが、 …んーわからなくなりました。以下は書きかけたけど、行き詰まったので考え るのをやめてしまった残骸です ^_^; ---------- うむむ…。ほとんど語感の問題かもしれませんが、「式の値」というと、 独立した式「1 + 2」と「7 - 4」のそれぞれの「値」は独立に存在するよう な感じがしません? (といっても、これが既に思い込みなんでしょうね。) もし独立に存在するものと直感する場合は、 「値」=オブジェクトという見方でいくと、 独立に存在する「値」が実は同一のオブジェクトである場合がある という事実を直感しにくく、 そうでないとすると、 「1 + 2」と「7 - 4」は同一だが、 「10000000000 + 20000000000」と「7000000000 - 4000000000」は同一でない といったことが (やめ) 高木 浩光@電子技術総合研究所 http://www.etl.go.jp/~takagi/ (工事中)