Next: Using setq, Up: set & setq [Contents][Index]
set
シンボルflowers
の値にリスト'(rose violet daisy
buttercup)
をセットしてみましょう。以下の式の後にカーソルを配置してから、C-x C-eをタイプして式を評価してください。
(set 'flowers '(rose violet daisy buttercup))
エコーエリアにリスト(rose violet daisy
buttercup)
が表示されるはずです。これはset
関数がリターンしたものです。副作用としてこのリストがシンボルflowers
にバインドされます。すなわち変数としてシンボルflowers
を見た場合の値として、このリストが与えられたのです。(ちなみにこれは値をセットするというLispインタープリターにとっての副作用が、人間にとっては関心のある主要な効果となり得ることを示しています。すべてのLisp関数はエラーが発生しなければ値をリターンしなければなりませんが、副作用をもつようにデザインされていないかぎり副作用はありません。)
set
式を評価した後にシンボルflowers
を評価すれば、セットした値がリターンされます。以下のシンボルの後にカーソルを配置してC-x
C-eをタイプしてください。
flowers
flowers
を評価すれば、エコーエリアにリスト(rose violet daisy
buttercup)
が表示されるでしょう。
同じようにしてクォートされた(引用符で括られた)変数である'flowers
を評価した場合には、エコーエリアで目にするのはflowers
というシンボル自体になるはずです。以下にクォートされたシンボルがあるので試すことができます:
'flowers
set
を使う際には、引数を評価されたくなければset
の両方の引数をクォートする必要があることにも注意してください。わたしたちは変数flowers
とリスト(rose
violet daisy
buttercup)
のいずれの引数も評価してほしくないので、両方ともクォートしました。(set
の1つ目の引数をクォートせずに使う際には、何よりもまずその1つ目の引数を評価します。そのような場合にflowers
がまだ値をもっていなければ、‘Symbol's
value as variable is
void’というエラーメッセージを受け取ることになるでしょう。反対にflowers
が評価されて値をリターンした場合には、set
はそのリターンされた値へのsetを試みます。関数にとってはこれが正しい状況もあるものの、そのような状況は稀です。)