GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Primitive-Function-Type.html ・ emacs-doc.conao3.com

2.4.15 プリミティブ関数型

プリミティブ関数とは、Lispから呼び出し可能でありながら、C言語で記述された関数のことです。プリミティブ関数は、subrや組み込み関数とも呼ばれます。(「subr」という語は「subroutine」に由来します。)ほとんどのプリミティブ関数は、呼び出された際にすべての引数を評価します。すべての引数を評価しないプリミティブ関数は、特殊形式と呼ばれます(特殊形式を参照)。

関数の呼び出し側にとって、その関数がプリミティブであるかどうかは問題になりません。しかし、Lispで記述した関数を用いてプリミティブを再定義しようとする場合には、これが問題となります。その理由は、プリミティブ関数がCコードから直接呼び出される可能性があるためです。Lispから再定義後の関数を呼び出す際は新しい定義が使用されますが、Cコードからの呼び出しでは依然として組み込みの定義が使用される可能性があります。したがって、プリミティブ関数の再定義は推奨しません。

関数という用語は、LispまたはCで記述されたものを問わず、すべてのEmacs関数を指します。Lispで記述された関数に関する情報については、関数型を参照してください。

プリミティブ関数には読み取り用の構文がなく、サブルーチン名を付したハッシュ表記で出力されます。

(symbol-function 'car)          ; Access the function cell
                                ;   of the symbol.
     ⇒ #<subr car>
(subrp (symbol-function 'car))  ; Is this a primitive function?
     ⇒ t                       ; Yes.