From: Inaba Hiroto Date: 1999-04-07T11:42:44+09:00 Subject: [ruby-list:13383] 稲葉です. なひさんの「気持」はわかるつもりなのですが, 術語の使い方が正確じゃない 気がするのでツッコミを入れてしまうだけなんです. で, またツッコミを入れます:-> Subject: [ruby-list:13369] Re: Ruby and LISP ( was Re: Ruby anywhere ) From: "NAKAMURA, Hiroshi" Date: Tue, 6 Apr 1999 23:22:51 +0900 > なひです. : > > def foo( n ) > > n = [] > > end > > x = [1] > > foo( x ) > > p x > > この例で「foo( x )」のところで起こっていることは, > > 1. n = x > nをxに束縛する. 変数 n に 変数 x の保持する値(ここでは[1])を束縛するのですね. > xのリファレンスカウントが1増える. そもそもrubyはリファレンスカウントを使っていない, ってのはおいといて, リファレンスカウントを使っていたとして, それが付くのは変数 x にでは なくて, [1] 等の実体に付くはずですね. > 2. n = [] > nを[]に束縛する. 最初のメールでもあったけど, これは「束縛(bind)」ではなくて,単に代入 と言うと思います. 束縛というのは環境に新しい変数を導入してその変数 に値を与える事だと思うのです. で, rubyは同じ「変数 = 式」が場合によって束縛の場合もあるし, 代入の場 合もあるわけです. 昨日調べたら schemeのdefineもtoplevelではそういう動 作をするようです. > []のリファレンスカウントが1増える. > xのリファレンスカウントが1減る(元に戻る). [1]のリファレンスカウントが1減る, ですね. > みたいなことですよね. > 実際のRubyのコードがどうかはわからないんですが.^^;;; > で,1の「n = x」をしているということは, > call-by-valueということですよね. はい, Lispもrubyも call by value です. ただし前田さんや高木さんが書か れているように「参照の値わたし」なわけです. > (一気に話を戻しますが)すると結局, > なひが感じていたLISPの香りというのは,なんなんだろう. 今日前田さんと原さんがメールされているような「変数」の考えかたがLisp とruby(とJavaとSmalltalk, 両方とも知らないけど)とで同じである, ってこ とではないのでしょうか? > じゃぁ(同じスタイルの)JavaがLISPの香りかというと,うーん...^^;;; とすると違うのかな? -- 稲葉 浩人