(rontolisp) docs
← cl パッケージの関数

fdefinition

(fdefinition function-name)

関数名の関数値を返します。関数名はシンボル (symbol-function と同じ) か、(defun (setf name) ...) が定義する関数を指す (setf name) リストです。未定義の名前は undefined-function を通知し、その cell-error-name はリストも含めて名前そのものです。

クォートされたシンボルリテラル ((fdefinition 'car)) はコンパイラではコンパイル時に解決されます。実行時に計算されたシンボルはコンパイル済み名前レジストリを通じて遅延解決され、同じ関数値を返します — symbol-function と同じで、相違点はありません。クォートされた (setf name) リストは全バックエンドで #'(setf name) と同じです。実行時に組み立てたリストも受け付けます。コンパイルバックエンドでは、計算されたシンボルがプログラム中に綴られていれば解決されるのと同じく、place のシンボルがプログラム中に綴られていればその関数が解決されます。

fdefinition は symbol-function と同じ setf の place です: (setf (fdefinition 'name) fn) は fn をそのシンボルのグローバルな関数定義としてインストールし、(setf (fdefinition '(setf name)) fn) は (setf name) 関数をインストールします。名前は実行時に組み立てたもの ((list 'setf p)、(intern s)) でもかまいません: そうした書き込み (または eval の defun) だけが束縛する名前の直接呼び出し、setf の place、#'name、fboundp は、全バックエンドで実行時にその名前を引きます。