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>
(foo) => "replaced"*error-output*, *macroexpand-hook*
マクロの定義と宣言の存在。
もしレキシカルで囲まれた関数がコンパイルされ、 その束縛にマクロとシンボルマクロと宣言以外ののもが 含まれてたいときの結果は未定義です
コンパイル処理中のエラーの検出の情報については、 3.2.5. コンパイラーの例外状況をご確認ください。
なし。