npt-japanese

% Macro DEFCONSTANT

UP


Macro DEFCONSTANT

Macro DEFCONSTANT

構文

defconstant name initial-value [documentation] => name

引数と戻り値

name - シンボル。評価されません。
initial-value - フォーム。評価されます。
documentation - 文字列。評価されません。

定義

defconstantは、 nameで指定されたグローバル変数に、 initial-valueを評価した結果の値を与えます。

defconstantによって定義された定数は、 defconstantによって再定義できます。 しかし、他の操作を使いシンボルに値を割り当てようとしたり、 後続のdefconstantを使い違う値を割り当てようとしたときの 結果は未定義です。

documentationが与えられたとき、 nameへドキュメント文字を種類variableとして割り当てます。

defconstantは通常トップレベルフォームに現れますが、 非トップレベルフォームに現れても意味があります。 しかし、下記で説明するコンパイル時の副作用は、 defconstantがトップレベルフォームとして現れた場所でのみ 効果があります。

defconstant実行時に nameという名前の変数の何らかの束縛がすでに存在するか、 またはinitial-valueとは違った値があるときの結果は未定義です。

レキシカルか動的かどちらかで定数のシンボルを再束縛した時の結果は未定義です。 言い換えると、defconstantで宣言されたシンボルは、 常にグローバルな値を参照します。

defconstantの実行の副作用は、 少なくとも下記のコードの副作用と同等でなければなりません。

(setf (symbol-value 'name) initial-value)
(setf (documentation 'name 'variable) 'documentation)

defconstantフォームがトップレベルフォームとして現れたとき、 コンパイラーはnameを定数の変数として認識する必要があります。 実装は値のフォームを、コンパイル時に評価するか、 ロード時に評価するか、あるいは両方かを選択できます。 したがって、 ユーザーはinitial-valueがコンパイル時に評価可能であり、 (ファイルにnameが現れるかどうかに関わらず) それが常に同じ値で評価されるかを確認する必要があります。

例文

(defconstant this-is-a-constant 'never-changing "for a test") =>  THIS-IS-A-CONSTANT
this-is-a-constant =>  NEVER-CHANGING
(documentation 'this-is-a-constant 'variable) =>  "for a test"
(constantp 'this-is-a-constant) =>  true

影響

なし。

例外

なし。

参考

declaim, defparameter, defvar, documentation, proclaim, 3.1.2.1.1.3. 定数の変数, 3.2. コンパイル

備考

なし。


TOP, Github