2.4.15 Примитивный тип функции

Примитивная функция (primitive function) — это функция, вызываемая из Lisp, но написанная на языке программирования C. Примитивные функции также называются subrs или встроенные функции (built-in functions). (Слово «subr» происходит от «subroutine».) Большинство примитивных функций вычисляют все свои аргументы при вызове. Примитивная функция, которая не вычисляет все свои аргументы, называется специальной формой (см. Специальные формы).

Каталог вызывающей стороны функции не имеет значения, является ли функция примитивной. Однако это имеет значение, если вы пытаетесь переопределить примитивную функцию функцией, написанной на Lisp. Причина в том, что примитивная функция может быть вызвана непосредственно из кода C. Вызовы переопределенной функции из Lisp будут использовать новое определение, но вызовы из кода C могут по-прежнему использовать встроенное определение. Поэтому мы не рекомендуем переопределять примитивные функции.

Термин функция (function) относится ко всем функциям Emacs, независимо от того, написаны они на Lisp или C. См. Тип функции (Function Type) для получения информации о функциях, написанных на Lisp.

Примитивные функции не имеют синтаксиса чтения и выводятся в хеш-нотации с именем подпрограммы.

(symbol-function 'car)          ; Получить ячейку функции
                                ;   символа.
     ⇒ #<subr car>
(subrp (symbol-function 'car))  ; Это примитивная функция?
     ⇒ t                       ; Да.