% Function PROCLAIM
Function PROCLAIM
proclaim
declaration-specifier => 実装依存
declaration-specifier - 宣言指定子
グローバル環境下でdeclaration-specifierで指定された宣言を確立します。
このような宣言はよくグローバル宣言かproclamation
と呼ばれ、
ローカルでシャドウされない限り常に有効です。
declaration-specifierに含まれる変数名、関数名は、 それぞれ動的変数、グローバル関数定義として参照されます。
次の表はproclaim
で使用可能な
宣言の識別子のリストです。
declaration |
inline |
optimize |
type |
ftype |
notinline |
special |
Figure 3-22. グローバル宣言指定子
実装はその他の(実装定義の)宣言識別子を自由にサポートできます。
(defun declare-variable-types-globally (type vars)
(proclaim `(type ,type ,@vars))
type)
;; 一度下記のフォームを実行したら動的変数*TOLERANCE*は
;; 常にフロートを格納しなければなりません。
(declare-variable-types-globally 'float '(*tolerance*))
=> FLOAT
なし。
なし。
proclaim
フォームの実行は
コンパイルに影響する果を与えるかもしれませんが、
コンパイラーはproclaim
フォームを認識しようとはしませんし、
特別な処理を行うこともありません。
下記のようなproclamation
がトップレベルフォームにあったとしても、
実行するまで何の効果もありません。
(proclaim '(special *x*))
もしコンパイル時に副作用が必要なのであれば、
eval-when
が使用できます。
例えば下記の通り。
(eval-when (:execute :compile-toplevel :load-toplevel)
(proclaim '(special *x*)))
しかしだいたいの場合、
このような目的にはdeclaim
を使うことが好まれます。
proclaim
フォームは通常の関数フォームなので、
マクロフォームがそれらを展開することができます。