From: takagi@... (TAKAGI, Hiromitsu) Date: 1999-04-09T03:19:50+09:00 Subject: [ruby-list:13516] Re: Ruby and LISP ( was Re: Ruby anywhere ) Shugo Maeda writes: > 逆に、高木さんの > > > > 「式を評価した結果」である「値」も(オブジェクトへの)参照(「reference」) > > > ですよね。そして変数はそれを保持しているだけと。 > > というモデルに従うと、「1 + 2という式の値」と「7 - 4という式の値」 > は異なるということになりますよね。 > 私の感覚的には両者は同じものであって欲しいんですが、「すべての数 > 値は世界でただ一つしかないオブジェクト」という考え方にどっぷりつ > かっているせいかもしれません。 仮に値(参照)が異なる (つまりオブジェクトが異なる) ものだったとしても、 そのオブジェクトが表現する内容が同一である ということでいいのでは ないかと。 もっと詳しく言うと、 「1 + 2という式の値」と「7 - 4という式の値」は、一般には、異なるかも しれないし同一かもしれない *1 が、 (整数を表現するオブジェクトのクラスが定義した + や - 演算の処理内容の 結果として) 少なくともそのオブジェクトが表現する内容は同一である。 さらに、 *1: Ruby では、整数クラスに関しては、中身が同一のオブジェクトは、唯一 つのオブジェクトしか存在しない ようになっている。(文字列に対してはそう はなっていない。) ということでしょう。 > 実際に計算機上で起こっていることを考えるとそぐわない部分もあるか > もしれませんが、モデル的には上記の考え方でうまくいくんじゃないか > なあ...。 上のように、整数の場合と文字列の場合とで、同じ内容のものが同一のオブジェ クトになるかどうかが異なるという点を理解しないで済まさないためには、や はりちゃんと理解する必要があるのではないかと。 > ruby a = 10 b = 10 p a.equal?(b) c = "aaa" d = "aaa" p c.equal?(d) ^D true false まとめ ・式の評価結果や変数が保持するのは「値」である。 ・「値」とはオブジェクトへの参照である。 ・オブジェクトは「オブジェクト」であって「値」ではない。 ・「1」というオブジェクトは「表現している内容」が整数の1である。 ・同じ内容を表現するオブジェクトが常に同一のオブジェクトとして計算 されるかどうかは、クラスによって異なる。 高木 浩光@電子技術総合研究所 http://www.etl.go.jp/~takagi/ (工事中)