Function: subrp object
この関数は、 object が built-in 関数の場合 t を返します。
Function: symbol-function symbol
シンボルの関数セル内のオブジェクトを返します。 (そのオブジェクトが関数とし て正しいか否かはチェックしませんが) シンボルの関数セルが void の場合、エ ラーになります。
(defun bar (n) (+ n 2)) => bar (symbol-function 'bar) => (lambda (n) (+ n 2)) (fset 'baz 'bar) => bar (symbol-function 'baz) => bar
Function: fboundp symbol
シンボルが(その)関数セルに何らかの値(void でないオブジェクト)を持つ場合 t を返し、そうでない場合 nil を返します。その値が関数として正しいか否かは チェックしません。
Function: fmakunbound symbol
この関数は、シンボルの関数ポインタを(シンボルの void ではない) "void" と し、このセルをアクセスするとエラーが出されるようにします(セクション 9.1 [makunbound]、ページ 73 参照)。
Function: fset symbol object
この関数は、シンボルの関数セルに object を設定します。 object は、(チェッ クされずに)関数もしくは、関数名として扱われます。 object を返します。通 常、あるシンボルの関数定義を、別のシンボルにコピーするのに用います。 (fset は) object そのものをシンボルの関数セルにストアする点に注意して下さい。
(fset 'first (symbol-function 'car)) => #<subr car> (first '(1 2 3)) => 1
;; もしくは: (fset 'first (function car)) => car (first '(1 2 3)) => 1 (symbol-function 'first) => car
Special Form: function object
(インタープリットされるコードでは) function は quote と同じになります。こ れはオブジェクトを評価せずに返します。しかし、バイトコンパイラは object が 関数として用いられるよう意図されていることを知り、 quote を用いた場合より 良いコードを出力します。以下に示す例は両方とも動きますが、最初のもののほう が効率的です。比較を行なうには、セクション 3.3 [quote]、ページ 30 を参照し て下さい。
(もっと良い例が必要!! これは良くない)
(function car) => car (defun foo (x) (funcall (function car) x)) ;速い => foo (byte-compile 'foo)
=> (lambda (x) (byte-code "\301\302K^H\"\207" [x funcall car] 4))
(defun foo1 (x) (funcall (quote car) x)) ;遅い => foo1 (byte-compile 'foo1) => (lambda (x) (byte-code "\301\302^H\"\207" [x funcall car] 3))