Именование функции
Символ может служить именем функции. Это происходит, когда ячейка функции символа (см. Компоненты символа) содержит объект функции (например, лямбда-выражение). Тогда сам символ становится допустимой вызываемой функцией, эквивалентной объекту функции в его ячейке функции.
Содержимое ячейки функции также называется определением функции символа. Процедура использования определения функции символа вместо самого символа называется непрямым обращением к функции символа; см. Непрямое обращение к функции. Если вы не присвоили символу определение функции, его ячейка функции считается пустой, и она не может использоваться как функция.
На практике почти все функции имеют имена и называются по своим именам. Вы можете создать именованную функцию Lisp, определив лямбда-выражение и поместив его в ячейку функции (см. Ячейки функций). Однако чаще используется специальная форма defun, описанная в следующем разделе. См. Определение функций.
Мы даём функциям имена, потому что удобно ссылаться на них по именам в выражениях Lisp. Кроме того, именованная функция Lisp может легко ссылаться на себя — она может быть рекурсивной. Более того, к примитивам можно обращаться только по их именам, так как объекты примитивных функций (см. Тип примитивной функции) не имеют синтаксиса чтения.
Функция не обязательно должна иметь уникальное имя. Данный объект функции обычно появляется в ячейке функции только одного символа, но это всего лишь соглашение. Его можно легко сохранить в нескольких символах, используя fset; тогда каждый из символов является допустимым именем для одной и той же функции.
Обратите внимание, что символ, используемый в качестве имени функции, также может использоваться как переменная; эти два использования символа независимы и не конфликтуют. (Это не так в некоторых диалектах Lisp, таких как Scheme.)
По соглашению, если символ функции состоит из двух имён, разделенных «--», функция предназначена для внутреннего использования, а первая часть называет файл, определяющий функцию. Например, функция с именем vc-git--rev-parse — это внутренняя функция, определённая в vc-git.el. Функции внутреннего использования, написанные на C, имеют имена, заканчивающиеся на «-internal», например, bury-buffer-internal. Код Emacs, предоставленный до 2018 года, может следовать другим соглашениям об именовании для внутреннего использования, которые постепенно отменяются.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Names.html