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を試みます。関数にとってはこれが正しい状況もあるものの、そのような状況は稀です。)