Function FUNCTION-LAMBDA-EXPRESSION

UP


Function FUNCTION-LAMBDA-EXPRESSION

Function FUNCTION-LAMBDA-EXPRESSION

構文

function-lambda-expression function
=> lambda-expression, closure-p, name

引数と戻り値

function - 関数
lambda-expression - ラムダ式か、nil
closure-p - generalized-boolean
name - オブジェクト

定義

下記に示すような、functionの情報を返却します。

第一返却値であるlambda-expressionは、 functionが定義されたラムダ式か、 もし情報が利用できないときはnilです。 ラムダ式は何らかの方法で前処理されているかもしれませんが、 しかしcompilefunctionの引数としては 適切のままであるべきです。 実装は、どんなfunctionlambda-expressionでも nilを返却するのは正当です。

第二返却値のclosure-pは、 functionの定義がnullのレキシカルな環境で囲まれていたか、 あるいはfunctionの定義が何らかの非nullのレキシカルな環境で囲まれた 非nilの環境下であれば、 nilが返却されます (注釈:非nullのレキシカルな環境とは、 グローバル環境から何の追加情報もないレキシカルな環境のことです)。 実装は、どんなfunctionclosure-pでも、 trueを返却するのは正当です。

第三返却値nameは、関数の名前です。 名前はデバッグ時にのみ使われ、 それは、例えばdefunfunctionの 名前として使われるのに有効である必要はありません。 慣例として、nilfunctionが名前を持たないことを意味します。 実装は、どんなfunctionnameでも、 nilを返却するのは正当です。

例文

下記の例はいくつか可能性のある返却値を示していますが、 しかし全てを網羅することを意図してはいません。

(function-lambda-expression #'(lambda (x) x))
=>  NIL, false, NIL
OR=>  NIL, true, NIL
OR=>  (LAMBDA (X) X), true, NIL
OR=>  (LAMBDA (X) X), false, NIL

(function-lambda-expression
   (funcall #'(lambda () #'(lambda (x) x))))
=>  NIL, false, NIL
OR=>  NIL, true, NIL
OR=>  (LAMBDA (X) X), true, NIL
OR=>  (LAMBDA (X) X), false, NIL
 
(function-lambda-expression 
   (funcall #'(lambda (x) #'(lambda () x)) nil))
=>  NIL, true, NIL
OR=>  (LAMBDA () X), true, NIL
NOT=>  NIL, false, NIL
NOT=>  (LAMBDA () X), false, NIL
  
(flet ((foo (x) x))
  (setf (symbol-function 'bar) #'foo)
  (function-lambda-expression #'bar))
=>  NIL, false, NIL
OR=>  NIL, true, NIL
OR=>  (LAMBDA (X) (BLOCK FOO X)), true, NIL
OR=>  (LAMBDA (X) (BLOCK FOO X)), false, FOO
OR=>  (SI::BLOCK-LAMBDA FOO (X) X), false, FOO
 
(defun foo ()
  (flet ((bar (x) x))
    #'bar))
(function-lambda-expression (foo))
=>  NIL, false, NIL
OR=>  NIL, true, NIL
OR=>  (LAMBDA (X) (BLOCK BAR X)), true, NIL
OR=>  (LAMBDA (X) (BLOCK BAR X)), true, (:INTERNAL FOO 0 BAR)
OR=>  (LAMBDA (X) (BLOCK BAR X)), false, "BAR in FOO"

副作用

なし。

影響

なし。

例外

なし。

参考

なし。

備考

実装は全ての場合において、自由にnil, true, nilを返却することができますが、 compileevalの呼び出しによって引数が作成された場合 (コンパイルされたファイルのロードによって生成されたものとは反対に)は、 第一返却値にラムダ式を返却することが推奨されています。


TOP, Github