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
フォームは通常の関数フォームなので、 マクロフォームがそれらを展開することができます。