ごとけんです

In message "[ruby-list:13800] Re: What is Object in Ruby? (Re: Ruby and LISP)"
    on 99/04/16, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:
>TheArray = []
>class YaArray
>  def push(x); TheArray.push x; end
>  def e(i); TheArray[i]; end
>end
>foo = YaArray.new
>foo.push("obj1")
>foo.push("obj2")
>p foo.e(0) #=> "obj1"
>p foo.e(1) #=> "obj2"
>
>このときオブジェクト foo は "obj1", "obj2" を参照していると
>言っていいのでしょうか?参照している様にも見えるけど、単に参
>照関係を横から見ているだけの様にも思えるし。

「参照している」というのは微妙ですね。参照とは何かという
ことを議論しようとするなら、なんらかの定義を採用した方が
よいでしょう。でも参照という言葉は Ruby には馴染まない気
もします。

>そもそもオブジェクトがオブジェクトを参照するってどういう定義
>かしら。変数がオブジェクトを参照するのと、変数がオブジェクト
>に束縛される(広義)ことは同値でしょうか?

僕は(ナイーヴには)束縛は「構造」で、参照は「イベント」だ
と分けて考えます。この分け方に従えば上の例は「参照の結果」
が "obj1" や "obj2" となります。ただし、それはあくまで 
foo にとっては、TheArray のメソッドが返したものでしかな
いと思います。つまり、せいぜい「参照していた」ということ
はできるでしょうが、「参照している」とはいえないという主
張です。定義にはなってませんが。

別な例でいうと、

a = [8,9]

は、「a[0] が 8 であり、かつ、a[1] が 9 である」という以
外のいい方をしてもあまり嬉しくないと思うのです。「参照」
というのは「値」と同様に C のような hard typing な言語な
ら自明に定義されるとは思いますが、Ruby では自然な定義は
ないと思うので、混乱の原因になるのではないでしょうか??

またぼくが構造といっているのは、さしあたりスナップショッ
トを撮ることに意味があるものだけです。各名前空間と個々の
名前にオブジェクトを対応させること(束縛)は構造だと思いま
す。これが各時点で意味を持たないとレシーバーが確定しない
ので。一方、オブジェクト自体はその「状態」を便宜的にかん
がえることはあるものの状態を確定させる際にイベント間での
時間順序を定めることができるかどうかにちょっと疑問がある
ので、今のところは構造だと思ってません。ただし、オブジェ
クトが存在するということ自体は構造の構成要素だと考えます。

まつもとさんが以前「状態」についていっていたのはそういう
ことも含意するのだと理解しています。alternative な見方は
メソッドの結果の可能性全体をもってそのオブジェクトの状態
とみなすものです。こちらは coalgebra という名前の分野で
近年盛んに研究されていて、可能性全体をとることで一意性が
保証されるのでこれもいいかもと思って僕は脇でみています。

-- gotoken