[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

learning lisp: symbol & binding



n高橋です。坂本さんが紹介してくれた早稲田のページにも書いてありますが、
*scratch* バッファの中で C-j を打つと、その直前のS式を評価して結果がプ
リントされます。色々試してみると面白いかもしれません。

Reiko TAKAHASHI  (高橋玲子)writes:

> } > (setq x 'y) → y
> } 
> } >  変数xそのものに、yという変数と同じ意味を持たせる。
> } > なので、全体の評価結果はy(という変数)。
> } 
> } う〜ん、ちょっと違います。シンボルxの値としてシンボルyを束縛するという
> } ことです。結果として、シンボルxを評価するとシンボルyが得られることにな
> } ります。シンボルには数値や文字列だけでなく、シンボルを束縛することもで
> } きます。

>  そうだったんですね! わかりました。
> 「シンボルに、シンボルが束縛できる」ということが飲み込めていなくて、yは数
> 字とかじゃないし、どう言ったらいいのかな、と悩んだあげく、「同じ意味を持
> たせる」とか「見なされる」とか書いていました。

> } もしxとyが同じ意味だとしたら、xを評価した結果も10にならなくてはいけま
> } せん。

>  これは、2行目で、(set x 10)とした瞬間に、そうならなければならない、と
> いうことですよね?

ちょっとおっしゃる意味がわかりません。もっとも前提である「もしxとyが同
じ意味だとしたら」という部分が偽なので、数学的にはどんな結論を出しても
いいことになりますけど。あ、この発言の方がもっとわからないか。(笑)
数理論理学の嫌いな人は無視して下さい。

> } # ちなみに別のシンボルだけでなく、自分自身を入れることもできます。
> } # (setq x 'x)
> } # x → x
> } # x → x
> } # …
> } # きりがない。これはこれは使うことがあります。

>  ……どう使えるのか、想像がつきません……。

使わないで済むうちは考える必要ないでしょう。ただし、t と nil の二つは
評価されると自分自身を返すということは知っておく必要があります。

> ただ、ある時点で、ある変数にどんな値が入っているか、ということと、S式から
> 返される値とは、必ずしも一緒ではないというか、関係ない場合もあるのかな…
> …ということはわかってきたと思います(墓穴かも……?)。

一般には、変数の値とS式を評価した値とは関係ありません。
変数が出てこないS式だってありますし。

-- 
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/