Go to the first, previous, next, last section, table of contents.

シンボルの関数セルを操作する

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))


Go to the first, previous, next, last section, table of contents.