% 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
です。
ラムダ式は何らかの方法で前処理されているかもしれませんが、
しかし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, 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
を返却することができますが、
compile
かeval
の呼び出しによって引数が作成された場合
(コンパイルされたファイルのロードによって生成されたものとは反対に)は、
第一返却値にラムダ式を返却することが推奨されています。