% 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. コンパイル
なし。