setq ¶ の使用記号 flowers の値をリスト (rose violet
daisy buttercup) に設定するには、式の後にカーソルを置き、C-x C-e
と入力して次の式を評価してください。
(setq flowers '(rose violet daisy buttercup))
リスト (rose violet daisy buttercup)
がエコーエリアに表示されます。これが setq 特殊形式によって返されるものです。副次的な効果として、シンボル flowers
がリストに束縛されます。つまり、変数と見なせるシンボル flowers
に、その値としてリストが代入されるということです。(ちなみに、このプロセスは、値を設定するという Lisp
インタプリタへの副次的な効果が、我々人間が関心を寄せる主たる効果となり得ることを示しています。というのも、すべての Lisp
関数は、エラーが発生しなければ値を返さなければなりませんが、副次的な効果を持つように設計されていない限り、副次的な効果のみを持つことになるからです。)
setq 式を評価した後、シンボル flowers
を評価すると、先ほど設定した値が返されます。こちらがそのシンボルです。シンボルの後にカーソルを置き、C-x
C-e と入力してください。
flowers
flowersを評価すると、エコー領域にリスト(rose
violet daisy buttercup)が表示されます。
ちなみに、前にクォートが付いた変数 'flowers
を評価すると、エコー領域に表示されるのはシンボルそのものである flowers
です。こちらがクォート付きのシンボルですので、ぜひお試しください:
'flowers
また、さらなる利便性として、setq
では一つの式の中で、複数の異なる変数にそれぞれ異なる値を設定できます。
変数 carnivores の値を setq
を用いてリスト '(lion tiger leopard) に設定するには、次の式を使用します。
(setq carnivores '(lion tiger leopard))
また、setq
を使用して、異なる変数に異なる値を代入することもできます。第1引数は第2引数の値に、第3引数は第4引数の値に、というようにそれぞれ紐付けられます。例えば、以下のようにして、樹木のリストをシンボル
trees に、草食動物のリストをシンボル herbivores に代入できます。
(setq trees '(pine fir oak maple)
herbivores '(gazelle antelope zebra))
(この表現は1行でもよかったかもしれませんが、ページに収まりきらなかったかもしれません。また、人間はきれいに整形されたリストの方が読みやすいと感じるものです。)
これまで「代入」という用語を用いてきましたが、setqの仕組みには別の考え方もあります。それは、setqがシンボルをリストへと指し示すというものです。後者の考え方は非常に一般的であり、今後の章では、名称の一部に「ポインタ」を含むシンボルに少なくとも一つは出会うことになります。この名称が選ばれたのは、そのシンボルに値、具体的にはリストが紐付いているためです。言い換えれば、そのシンボルはリストを指すように設定されているということです。