Next: Closures, Previous: Anonymous Functions, Up: Functions [Contents][Index]
あるシンボルの関数定義(function definition)とは、そのシンボルの関数セルに格納されたオブジェクトのことです。ここでは、シンボルの関数セルにアクセス、テスト、セットする関数を説明します。
Definition of indirect-functionの、関数indirect-function
も参照してください。
これは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にすることができます。
この関数は、そのシンボルが関数セルにオブジェクトをもっていればt
、それ以外はnil
をreturnします。これは、そのオブジェクトが本物の関数であるかチェックしません。
この関数はsymbolの関数セルをvoidにします。そのため、これ以降に関数セルにアクセスしようと試みると、void-function
エラーが発生します。これはsymbolをreturnします(Void Variablesのmakunbound
も参照してください)。
(defun foo (x) x) (foo 1) ⇒1
(fmakunbound 'foo) ⇒ foo
(foo 1) error→ Symbol's function definition is void: foo
この関数はsymbolの関数セルに、definitionを格納します。結果はdefinitionです。definitionは通常、関数または関数の名前であるべきですが、これはチェックされません。引数symbolは、通常のどおり評価される引数です。
この関数は主に、関数を定義したり変更すして構成を行う、defun
やadvice-add
のようなものからサブルーチンとして使用されます。シンボルにたいして、たとえばキーボードマクロ(Keyboard Macrosを参照してください)のような、関数ではない関数定義与えるためにも使用することができます:
;; 名前つきのキーボードマクロを定義する。
(fset 'kill-two-lines "\^u2\^k")
⇒ "\^u2\^k"
関数にたいして別の名前を作成するためにfset
を使いたい場合は、かわりにdefalias
の使用を考慮してください。Definition of defaliasを参照してください。