シンボルは関数名として機能することがあります。これは、シンボルの関数セル(シンボルの構成要素を参照)に関数オブジェクト(例:ラムダ式)が含まれている場合に起こります。このとき、シンボル自体が有効な呼び出し可能な関数となり、その関数セル内の関数オブジェクトと同等になります。
関数セルの内容は、シンボルの関数定義とも呼ばれます。シンボルの代わりにその関数定義を用いる処理はシンボル関数間接参照と呼ばれます。シンボル関数間接参照を参照してください。シンボルに関数定義を与えていない場合、その関数セルはvoidであると言われ、関数として使用することはできません。
実際には、ほぼすべての関数に名前が付いており、その名前で参照されます。ラムダ式を定義して関数セルに格納することで、名前付きのLisp関数を作成できます(関数セルの内容へのアクセスを参照)。ただし、次節で説明するdefunマクロを使用するのがより一般的です。関数の定義を参照してください。
Lispの式において名前で参照するのが便利であるため、関数には名前を付けます。また、名前付きのLisp関数は容易に自身を参照でき、再帰的に記述することも可能です。さらに、プリミティブ関数オブジェクト(プリミティブ関数型を参照)には読み取り用の構文がないため、プリミティブはテキスト上では名前でしか参照できません。
関数が一意の名前を持つ必要はありません。ある関数オブジェクトは、通常単一のシンボルの関数セルにのみ現れますが、これは単なる慣習に過ぎません。fsetを用いれば、複数のシンボルに格納することも容易であり、そうすれば各シンボルが同一の関数に対する有効な名前となります。
なお、関数名として用いられるシンボルは、変数としても使用できる点に注意してください。シンボルのこれら2つの用法は独立しており、競合することはありません。(Schemeなどの一部のLisp方言では、この限りではありません。)
慣例として、関数のシンボルが ‘--’
で区切られた2つの名前で構成されている場合、その関数は内部利用を目的としており、前半部分はその関数を定義するファイル名を示します。例えば、vc-git--rev-parse という名前の関数は、vc-git.el で定義されている内部関数です。C言語で記述された内部利用関数は、bury-buffer-internal のように名前が ‘-internal’
で終わります。2018年より前に提供されたEmacsコードでは、他の内部利用用の命名規則に従っている場合がありますが、これらは段階的に廃止されつつあります。