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

Re: [bep] learning lisp: symbol & binding



 高橋です。

Reply Koichi INOUE <inoue@...>'s message:

} まあ、変数には数値や文字列だけでなくシンボルを入れることができるというこ
} とで、たとえば.emacsに
} (setq mew-pop-auth 'pass)
} なんて書いていたのを思い出してください。mew-pop-authを評価するとpassとい
} うシンボルになります。

 先日、深沢さんの振り分けのお話を読んでいて、
(setq mew-refile-guess-alist ...)
のところに'が入っていたことにあらためて気づいて、なるほど!と思いました。
でもでも、今Mewのinfoを見たら、infoの例だと、'って付いてなくないですか…
…?

} > t と 't と "t" と ?t は違う意味を持っていますか?
} 
} まず、後ろ二つは全く別です。?tはシンボルじゃなくて「tという文字」だし、
} "t"は「t1文字をちょうど含む大きさの箱(文字列)」です。

 あっ、やっぱり「文字」と「シンボル」とは違うんですね。
……文字ってなんでしょう……??

} で、tと'tなのですが、これら二つを評価すると同じものになります。
} tを評価すると(前に解説されているように)t自身になります。
} 'tを評価すると、クオートが1回とれてt自身になります。
} ここまで見ると同じものかと思ってしまうのですが、たとえば
} ''''t
} とtは違います。''''tの評価結果は'''tです。
}  tというシンボルをmew-auto-getという変数にセットしたいとき、
} tはシンボルなので、
} (setq mew-auto-get 't)
} と書くべきだと思いますが、tは評価してもtだと知っているので普通は
} (setq mew-auto-get t)
} と書く。
} ということで身近になるでしょうか。
} 後、
} シンボルは評価するとその束縛されている値がでてくるはずだけど、tとnilだけ
} は数値や文字列をと同じように、評価してもそれ自身になる。
} という説明も正しいかと思います。

 とてもよくわかりました(と思います)。

} N高橋さんのメールにもあったように、シンボルは変数としての値と関数として
} の値を持つことができます。
} tとnilは変数として評価すると値(実は自分自身)が入っているので変数ですが、
} 関数としては定義されていないようです。
} (t)
} や
} (nil)
} はエラーになります。

 やりたければ、t や nil という名前で関数を作ってしまうこともできるんです
ね。
ややこしいから、絶対やりたくなさそうだけど。


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**