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
です。 ラムダ式は何らかの方法で前処理されているかもしれませんが、 しかしcompile
やfunction
の引数としては 適切のままであるべきです。 実装は、どんなfunctionのlambda-expressionでも nil
を返却するのは正当です。
第二返却値のclosure-pは、 functionの定義がnull
のレキシカルな環境で囲まれていたか、 あるいはfunctionの定義が何らかの非null
のレキシカルな環境で囲まれた 非nil
の環境下であれば、 nil
が返却されます (注釈:非null
のレキシカルな環境とは、 グローバル環境から何の追加情報もないレキシカルな環境のことです)。 実装は、どんなfunctionのclosure-pでも、 trueを返却するのは正当です。
第三返却値nameは、関数の名前です。 名前はデバッグ時にのみ使われ、 それは、例えばdefun
やfunction
の 名前として使われるのに有効である必要はありません。 慣例として、nil
は functionが名前を持たないことを意味します。 実装は、どんなfunctionのnameでも、 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, NIL0 BAR)
OR=> (LAMBDA (X) (BLOCK BAR X)), true, (:INTERNAL FOO "BAR in FOO" OR=> (LAMBDA (X) (BLOCK BAR X)), false,
なし。
なし。
なし。
なし。
実装は全ての場合において、自由にnil, true, nil
を返却することができますが、 compile
かeval
の呼び出しによって引数が作成された場合 (コンパイルされたファイルのロードによって生成されたものとは反対に)は、 第一返却値にラムダ式を返却することが推奨されています。