Function COMPILE
compile
name &optional definition => function, warnings-p, failure-p
name - 関数名か、nil
definition - ラムダ式か関数。 デフォルトは、もしnameが関数名のときはその関数定義、 マクロ関数の名前のときはマクロ関数です。 nameがnil
で definitionが与えられなかったときの結果は未定義です。
function - 関数名か、コンパイルされた関数
warnings-p - generalized-boolean
failure-p - generalized-boolean
interpreted-function
をコンパイルします。
compile
は、definitionからコンパイル関数を生成します。 もしdefinitionがラムダ式のときは、それを強制的に関数へ変換します。 もしdefinitionがすでにコンパイル関数のときは、 compile
は自分自身の関数(例えば同一の操作)か、 同等の関数を生成します。
もしnameがnil
のときは、 コンパイル関数の返却は、主値に直接返却されます。 もしnameのnil
ではないときは、 コンパイル関数はnameに定義されている既存の関数を置き換え、 nameを主値に返却します。 もしnameがマクロ名のシンボルのときはそのマクロ関数が更新され、 nameを主値に返却します。
コンパイル関数による処理でコードに現れたリテラルオブジェクトは、 コピーも合体もされません。 compile
の実行により返却されたコードが 参照しているオブジェクトは、 ソースコード上の対応するオブジェクトとeql
で一致します。
compile
は、型error
のコンディションへの handler
を確立させることを許しますが、しかし必須ではありません。 例えば、そのhandler
は警告を発し、 いくつかの実装依存の部分に対して 手動で介入することなくコンパイルを再開することができます。
第二返却値のwarnings-pは、 もしコンパイルによって型error
かwarning
の コンディションが検出されなかったらfalseに、それ以外はtrueになります。
第三返却値のfailer-pは、 もしコンパイルによって型error
か あるいはstyle-warning
以外のwarning
の コンディションが検出されなかったらfalseに、それ以外はtrueになります。
defun foo () "bar") => FOO
(compiled-function-p #'foo) => implementation-dependent
(compile 'foo) => FOO
(compiled-function-p #'foo) => true
(setf (symbol-function 'foo)
(compile nil '(lambda () "replaced"))) => #<Compiled-Function>
(=> "replaced" (foo)
*error-output*
, *macroexpand-hook*
マクロの定義と宣言の存在。
もしレキシカルで囲まれた関数がコンパイルされ、 その束縛にマクロとシンボルマクロと宣言以外ののもが 含まれてたいときの結果は未定義です
コンパイル処理中のエラーの検出の情報については、 3.2.5. コンパイラーの例外状況をご確認ください。
なし。