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