2.4.15 原函数类型

原函数是指由Lisp调用,但是是用 C 编写的函数。原函数也称作为 subr 或者 内置函数 (built-in functions)。(单词 "subr" 源自 "subroutine"--子例程。)绝大多数的原函数被调用时,会先对参数进行求值。而余下的函数被称为特殊表达式(special form)。特殊表达式在调用时,不会对其参数求值。

当调用函数时,函数是不是原函数并不重要。不过,如果你尝试用lisp代码重定义函数时,这点就很重要。原因是,原函数的调用很可能会绕过Lisp,而直接调用 C 中的代码,这样你的重定义可能会失效。因此我们非常不建议原函数的重定义。

术语 函数(function)单纯指Emacs中的所有函数,而不区分Lisp函数和C函数。详情查阅函数类型章节)。

原函数没有读取语法,其打印表示采用哈希表示,其记号是子例程的名称。

(symbol-function 'car)        ; 获取符号的函数槽
    => #<subr car>
(subrp (symbol-function 'car)) ; 这是原函数吗?
    => t                       ; 是。

最后更新于