In message <9904070229.AA11857 / tux0017.sdd.tokyo-sc.toshiba.co.jp>
inaba / sdd.tokyo-sc.toshiba.co.jp writes:

> >     nを[]に束縛する.
> 
> 最初のメールでもあったけど, これは「束縛(bind)」ではなくて,単に代入
> と言うと思います. 束縛というのは環境に新しい変数を導入してその変数
> に値を与える事だと思うのです.

うーむ,良くわからない.Lisp や ruby や Smalltalk で「代入」に見える物
はすべからく「束縛」だと思っていたりしたので.数学的に正しい意味でのい
い方,というよりは感覚的なものですが.「束縛は新たな『名前』を導入して
値を結びつける事である」ということですが,「結びつける」という行為を
「束縛」と表現したくなる.

「新たに変数を導入する事」を何と呼んだらいいんだろうか,という話にもな
りますが,これはとりあえず変数の導入とか名前の導入とかいっとけばいいか
と.


> で, rubyは同じ「変数 = 式」が場合によって束縛の場合もあるし, 代入の場
> 合もあるわけです. 昨日調べたら schemeのdefineもtoplevelではそういう動
> 作をするようです.

名前の導入と値の結びつけを同時に行っているか,名前と値の結びつけだけを
やっているか,という事でしょうか.....「symbol の introduce と bind」
と「rebind」って表現したくなるんで,やっぱり両方「束縛」に見える.言語
感覚だけで物をいっても仕方ありませんが....


> > なひが感じていたLISPの香りというのは,なんなんだろう.
> 
> 今日前田さんと原さんがメールされているような「変数」の考えかたがLisp 
> とruby(とJavaとSmalltalk, 両方とも知らないけど)とで同じである, ってこ
> とではないのでしょうか?

「リストが便利に扱えればそれは Lisp だ」という意見の方もいらっしゃるよ
うですが (^^;

# 「Perl だって Lisp みたいなもんだよね」というぐらいだからかなり過激
# な意見ですが (^^;


> > じゃぁ(同じスタイルの)JavaがLISPの香りかというと,うーん...^^;;;
> 
> とすると違うのかな?

わたしが ruby と Lisp を近しい物と感じるのは

    * オブジェクトとシンボルがわかれている.....シンボルは決してオブ 
      ジェクトではない.シンボル自体に対する操作はできない.

      # Lisp ではシンボルもファーストクラスのオブジェクトですが,これ
      # は意味が違う.

    * シンボルには好きな型のオブジェクトを束縛できる.

    * たいがいの式/文は値を持ち,好きに式の中に入れる事ができる.

という事ぐらいでしょうか.Cons と基本五関数(car,cdr,cons, atom?,
eq?)を用意してやると,「一番外側のかっこが無くて引数の間には `,' が必
要な Lisp」のようなプログラムを書けます.

    def equal?(a, b)
      if eq?(car(a), car(b))
	equal(cdr(a), cdr(b))
      else
	false
      end
    end

    equal?(cons(1, cons(2, nil)), cons(1, cons(2, nil))) #=> true

とか.

# 本当は eq? は ruby 固有の物とかぶってしまうからまずいんですが.それに
#    (equal? (cons 1, (cons 2, nil)), (cons 1, (cons 2, nil)))
# と書いた方がより雰囲気が出る.しかもこのぐらいなら問題なく通る. irb 
# で使うと気分はまさに Lisp そのもの.... (^^;

-- 
柳川和久 @ 東大阪市 . 大阪府                                  April 7, 1999
絶対に負けない方法を教えてあげよう....戦わないことだ