Function PROCLAIM

UP


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

影響

なし。

例外

なし。

参考

declaim, declare, 3.2. コンパイル

備考

proclaimフォームの実行は コンパイルに影響する果を与えるかもしれませんが、 コンパイラーはproclaimフォームを認識しようとはしませんし、 特別な処理を行うこともありません。 下記のようなproclamationがトップレベルフォームにあったとしても、 実行するまで何の効果もありません。

(proclaim '(special *x*))

もしコンパイル時に副作用が必要なのであれば、 eval-whenが使用できます。 例えば下記の通り。

(eval-when (:execute :compile-toplevel :load-toplevel)
  (proclaim '(special *x*)))

しかしだいたいの場合、 このような目的にはdeclaimを使うことが好まれます。

proclaimフォームは通常の関数フォームなので、 マクロフォームがそれらを展開することができます。


TOP, Github