以下に、カウンタで setq
を使用する例を示します。これは、プログラムの一部が何回繰り返されるかをカウントする際に利用できます。まず、変数を 0
に設定し、プログラムが繰り返されるたびにその値に 1
を加算します。これを実現するには、カウンタとして機能する変数と、2つの式が必要です。1つ目はカウンタ変数を 0 に設定する初期の setq 式、2つ目は評価されるたびにカウンタをインクリメントする2つ目の setq 式です。
(setq counter 0) ; Let’s call this the initializer. (setq counter (+ counter 1)) ; This is the incrementer. counter ; This is the counter.
(‘;’ 以降のテキストはコメントです。関数定義の変更を参照してください。)
これらの式のうち、最初の式である初期化子 (setq counter 0) を評価し、次に3番目の式
counter を評価すると、エコー領域に数値 0 が表示されます。続いて2番目の式であるインクリメント子 (setq
counter (+ counter 1)) を評価すると、カウンタの値は 1 になります。したがって、再び counter を評価すると、エコー領域に数値 1
が表示されます。2番目の式を評価するたびに、カウンタの値がインクリメントされます。
インクリメント演算子 (setq counter (+ counter 1))
を評価する際、Lispインタプリタはまず最内層のリストを評価します。これが加算です。このリストを評価するために、変数 counter と数値 1 を評価する必要があります。変数
counter を評価すると、現在の値が得られます。この値と数値 1 を +
に渡し、それらを加算させます。その和が最内層リストの値として返され、setq に渡されて、変数
counter にこの新しい値が代入されます。こうして、変数 counter の値が変更されます。