Lisp-variables
LISP-変数
LISPでは、各変数は*記号*で表されます。 変数の名前はシンボルの名前であり、シンボルのストレージセルに保存されます。
グローバル変数
グローバル変数はLISPシステム全体で永続的な値を持ち、新しい値が指定されるまで有効です。
通常、グローバル変数は defvar 構造を使用して宣言されます。
例えば
(defvar x 234)
(write x)
[実行]ボタンをクリックするか、Ctrl + Eを入力すると、LISPはすぐに実行し、返される結果は
234
LISPには変数の型宣言がないため、 setq コンストラクトでシンボルの値を直接指定します。
例えば
->(setq x 10)
上記の式は、値10を変数xに割り当てます。 式としてシンボル自体を使用して、変数を参照できます。
*symbol-value* 関数を使用すると、シンボルの保存場所に保存されている値を抽出できます。
例えば
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
(setq x 10)
(setq y 20)
(format t "x = ~2d y = ~2d ~%" x y)
(setq x 100)
(setq y 200)
(format t "x = ~2d y = ~2d" x y)
[実行]ボタンをクリックするか、Ctrl + Eを入力すると、LISPがすぐに実行し、返される結果が返されます。
x = 10 y = 20
x = 100 y = 200
ローカル変数
ローカル変数は、特定のプロシージャ内で定義されます。 関数定義内の引数として指定されたパラメーターもローカル変数です。 ローカル変数は、それぞれの関数内でのみアクセス可能です。
グローバル変数と同様に、ローカル変数も setq コンストラクトを使用して作成できます。
ローカル変数を作成するための let と prog の2つの構造があります。
let構文の構文は次のとおりです。
(let ((var1 val1) (var2 val2).. (varn valn))<s-expressions>)
ここで、var1、var2、.. varnは変数名、val1、val2、.. valnは、それぞれの変数に割り当てられた初期値です。
*let* が実行されると、各変数にそれぞれの値が割り当てられ、最後に_s-expression_が評価されます。 最後に評価された式の値が返されます。
変数の初期値を含めない場合、* nil。*に割り当てられます
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
(let ((x 'a) (y 'b)(z 'c))
(format t "x = ~a y = ~a z = ~a" x y z))
[実行]ボタンをクリックするか、Ctrl + Eを入力すると、LISPがすぐに実行し、返される結果が返されます。
x = A y = B z = C
*prog* コンストラクトには、最初の引数としてローカル変数のリストがあり、その後に* prog、*の本体と任意の数のs-expressionが続きます。
*prog* 関数は、s-expressionのリストを順番に実行し、* return。*という名前の関数呼び出しが発生しない限り、nilを返します。その後、 *return* 関数の引数が評価されて返されます。
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
(prog ((x '(a b c))(y '(1 2 3))(z '(p q 10)))
(format t "x = ~a y = ~a z = ~a" x y z))
[実行]ボタンをクリックするか、Ctrl + Eを入力すると、LISPがすぐに実行し、返される結果が返されます。
x = (A B C) y = (1 2 3) z = (P Q 10)