ごとけんです

# 僕は「破壊的」という言葉が定義できるかという点に興味を
# もって参加しています。

In message "[ruby-list:13842] Re: What is Object in Ruby? (Re: Ruby and LISP)"
    on 99/04/17, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:
>【「用語の使い方」草案1】
>
>(1)変数の束縛
>
>var = "obj" とするとき、変数はオブジェクト "obj" に「束縛
>された」といいます。逆にいえば、オブジェクト "obj" は変数
>var を束縛する。さらに foo = var とすると、foo も "obj" に
>束縛されます。どちらの = も Ruby では「代入」呼ばれます。
>(2つの = に区別があるかどうかの判断は保留。)

「評価」という言葉を導入すれば区別なく使えると思います。
また、変数のスコープにも触れた方がよいと思います。

>これは広義の束縛であって、lisper にとってこの使い方は気持
>ちわるいです。lisper にとっては新しい変数を導入し値を代入
>することが束縛です。

言葉についた手垢は言葉の意味に影響するので少し蛇足します。
Lisp の起源はλ計算にあると思うのだけど、λ計算に限らず、
広く(形式)言語には束縛という概念があります。もともとは変
数の出現が bound か free かを問うものです。TeX の記法を
使わせてもらうと

	$$ \int_0^x f(s) ds $$

で、f と x は自由な出現ですが、 s は束縛されています(原
さんにはシャカニセッポウなのだが)。また、日本語だとわか
りにくいのですが、この場合の「束縛された」というのは 
free と対立していることからわかるように形容詞です(もちろ
ん過去分詞だけど、それはさておき)。なひさんの指摘にもあ
るように、Lisp の機構で本質的なのはλ項での引数の束縛で
す。Ruby の場合が決定的に違うのは、変数のスコープががネ
ストしないことでしょう。また、ブロックで初めて出て来た変
数名は外側には影響を与えないというのも同じことですが束縛
と呼ぶかどうかはともかくとしても初学者にはわかりにくいで
すね。

なお、Ruby でも Lisp でも実際には自由な変数の出現はあり
得ないというのも指摘されるべきかも知れません(λ式的解釈
からすれば lhs = rhs の左辺での出現も束縛されていると考
えます)。また一般に言語における束縛は文法的な問題ですが、
eval をもつ処理系の場合はかならずしもそうではないという
のはやや注意が必要です。

# % echo 'a = "foo"' | ruby -e 'eval("p " + gets.chomp)'

>(2)変数がオブジェクト参照すること
>
>var = "obj" とするとき、変数はオブジェクト "obj" を参照して
>います。(「参照とは何か」という事と「束縛とどう違うか」に
>ういては議論中。)少なくともこのときは参照していると言って
>いいでしょう。

var を評価した結果が "obj" になるとき var は "obj" を
「参照している」というのですね。ふむふむ。

>(3)オブジェクトがオブジェクト参照すること
>
>オブジェクト obj1 のあるインスタンス変数 @var が他のオブジェ
>クト obj2 を参照しているときは、「オブジェクト obj1 は obj2
>を(@var を通して)参照している」と言って良いでしょう。
>(他の場合にもオブジェクト同士の参照関係があるかについては議
>論中。)

インスタンス引数をもたない組み込みのクラスに関してはどう
なのでしょうか??  組み込みクラスとユーザー定義クラスで区
別を設けない方が望ましいと思います。

>(4)オブジェクトが変数を参照すること
>
>いまのところこの言い方はしないようにしましょう。
>
>(5)変数がオブジェクトを束縛すること
>
>さしあたってこれも避けます。

>(6)オブジェクトがオブジェクトを束縛すること
>
>これもさしあたって使わない方がいいのではないでしょうか。

趣旨はわかるのでいちおう了解。

>いまのところこのぐらいです。で、束縛はかなりテクニカルターム
>であって定義の問題ですが、日常語に近い「参照」あるいは「参照
>する」という言葉についてどう使うかについて議論がいろいろ出て
>います。

うーん、定義するかしないかで決着をつけるのではなく、用法
を制限しようということですね。とすれば、自然さを追求した
方がよいと思います。あくまで用語ではなく日本語として使う
のであれば議論抜きで「参照している」というのを受け入れて
もまぁよいのだけど、そういうお気楽さでよいですか??

直観的な説明のための言葉でよいなら、「破壊的」や「参照」
は受け入れられますが、それを越えてなんらかの無矛盾な用法
を導入するのなら、ちゃんと定義された用語であることが望ま
しいと思います。

僕は定義の善し悪しを追求しようかと思っていました。参照を
定義したくなるのは、「破壊的」を定義しようとしてたからで
すよね、確か。だから、そっちを主眼に攻めた方が良いのでは
ないでしょうか??  ただし破壊的か否かもクラスの実装の話で
もあるので、言語レベルの用語としては定義できないという気
もかなりしてます。組み込みや拡張モジュールのクラスなら、
インスタンス変数では状態を指定できませんし。

>後、式を評価した「値」という言葉をオブジェクトへの「参照」と
>とるか、オブジェクトそのものととるかという大問題も残っていま
>す。

評価の結果は常にオブジェクトであるという表現には間違いは
ないですよね。だとすれば参照という言葉をわざわざ使う必要
もないかとも思います。

-- gotoken