Function COMPILE

UP


Function COMPILE

Function COMPILE

構文

compile name &optional definition => function, warnings-p, failure-p

引数と戻り値

name - 関数名か、nil
definition - ラムダ式か関数。 デフォルトは、もしnameが関数名のときはその関数定義、 マクロ関数の名前のときはマクロ関数です。 namenildefinitionが与えられなかったときの結果は未定義です。
function - 関数名か、コンパイルされた関数
warnings-p - generalized-boolean
failure-p - generalized-boolean

定義

interpreted-functionをコンパイルします。

compileは、definitionからコンパイル関数を生成します。 もしdefinitionがラムダ式のときは、それを強制的に関数へ変換します。 もしdefinitionがすでにコンパイル関数のときは、 compileは自分自身の関数(例えば同一の操作)か、 同等の関数を生成します。

もしnamenilのときは、 コンパイル関数の返却は、主値に直接返却されます。 もしnamenilではないときは、 コンパイル関数はnameに定義されている既存の関数を置き換え、 nameを主値に返却します。 もしnameがマクロ名のシンボルのときはそのマクロ関数が更新され、 nameを主値に返却します。

コンパイル関数による処理でコードに現れたリテラルオブジェクトは、 コピーも合体もされません。 compileの実行により返却されたコードが 参照しているオブジェクトは、 ソースコード上の対応するオブジェクトとeqlで一致します。

compileは、型errorのコンディションへの handlerを確立させることを許しますが、しかし必須ではありません。 例えば、そのhandlerは警告を発し、 いくつかの実装依存の部分に対して 手動で介入することなくコンパイルを再開することができます。

第二返却値のwarnings-pは、 もしコンパイルによって型errorwarningの コンディションが検出されなかったら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. コンパイラーの例外状況をご確認ください。

参考

compile-file

備考

なし。


TOP, Github