Next: , Previous: , Up: Functions   [Contents][Index]


12.8 Accessing Function Cell Contents

あるシンボルの関数定義(function definition)とは、そのシンボルの関数セルに格納されたオブジェクトのことです。ここでは、シンボルの関数セルにアクセス、テスト、セットする関数を説明します。

Definition of indirect-functionの、関数indirect-functionも参照してください。

Function: symbol-function symbol

これはsymbolの関数セル内のオブジェクトをreturnします。これは、returnされたオブジェクトが本物のの関数であるかチェックしません。

関数セルがvoidの場合、return値はnilです。関数セルがvoidのときと、nilがセットされているときを区別するには、fboundp(以下参照)を使用します。

(defun bar (n) (+ n 2))
(symbol-function 'bar)
     ⇒ (lambda (n) (+ n 2))
(fset 'baz 'bar)
     ⇒ bar
(symbol-function 'baz)
     ⇒ bar

シンボルに何の関数定義も与えていない場合、そのシンボルの関数セルはvoidだと言います。別の言い方をすると、その関数セルは、どんなLispオブジェクトも保持しません。そのシンボルを関数として呼びだそうとすると、Emacsはvoid-functionエラーをシグナルします。

voidは、nilやシンボルvoidとは異なることに注意してください。シンボルnilおよびvoidはLispオブジェクトであり、他のオブジェクトと同様、関数セルに格納することができます(これらのシンボルはdefunを使用して有効な関数に成ることができます)。voidである関数セルは、どのようなオブジェクトも含みません。

fboundpを使用して、任意のシンボルの関数定義がvoidかどうかテストすることができます。シンボルに関数定義を与えた後は、fmakunboundをつかえば、再びvoidにすることができます。

Function: fboundp symbol

この関数は、そのシンボルが関数セルにオブジェクトをもっていればt、それ以外はnilをreturnします。これは、そのオブジェクトが本物の関数であるかチェックしません。

Function: fmakunbound symbol

この関数はsymbolの関数セルをvoidにします。そのため、これ以降に関数セルにアクセスしようと試みると、void-functionエラーが発生します。これはsymbolをreturnします(Void Variablesmakunboundも参照してください)。

(defun foo (x) x)
(foo 1)
     ⇒1
(fmakunbound 'foo)
     ⇒ foo
(foo 1)
error→ Symbol's function definition is void: foo
Function: fset symbol definition

この関数はsymbolの関数セルに、definitionを格納します。結果はdefinitionです。definitionは通常、関数または関数の名前であるべきですが、これはチェックされません。引数symbolは、通常のどおり評価される引数です。

この関数は主に、関数を定義したり変更すして構成を行う、defunadvice-addのようなものからサブルーチンとして使用されます。シンボルにたいして、たとえばキーボードマクロ(Keyboard Macrosを参照してください)のような、関数ではない関数定義与えるためにも使用することができます:

;; 名前つきのキーボードマクロを定義する。
(fset 'kill-two-lines "\^u2\^k")
     ⇒ "\^u2\^k"

関数にたいして別の名前を作成するためにfsetを使いたい場合は、かわりにdefaliasの使用を考慮してください。Definition of defaliasを参照してください。