primitive function原语函数 是可以从 Lisp 中调用,但由 C 语言编写的函数。原语函数也被称为 subrs 或 built-in functions内置函数。(“subr” 一词来源于 “subroutine”,即子程序。)大多数原语函数在调用时会对所有参数求值。不对全部参数求值的原语函数称为 special form特殊形式(see 特殊形式)。
对于函数调用者来说,该函数是否为原语函数并不重要。但如果你尝试用 Lisp 函数重定义一个原语函数,情况就不一样了。原因在于:原语函数可能会被 C 代码直接调用。从 Lisp 中调用重定义后的函数会使用新定义,但从 C 代码中的调用仍可能使用内置的原定义。因此,我们不建议重定义原语函数。
术语 function函数 泛指所有 Emacs 函数,无论它是用 Lisp 还是 C 编写的。关于 Lisp 编写的函数,see 函数类型。
原语函数没有可读语法,打印时会以井号尖括号形式显示子程序名称。
(symbol-function 'car) ; 访问符号的函数单元。即获取符号绑定的函数 ⇒ #<subr car> ; 输出:#<subr car> (subrp (symbol-function 'car)) ; 这是一个原始函数吗? ⇒ t ; 是。