% Function COMPILE
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. コンパイラーの例外状況をご確認ください。
なし。