Lisp-variables

提供:Dev Guides
移動先:案内検索

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 コンストラクトを使用して作成できます。

ローカル変数を作成するための letprog の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)