Описание примера функции
В описании функции имя описываемой функции указывается вначале. За ним в той же строке следует список имён аргументов. Эти имена также используются в теле описания, чтобы обозначать значения аргументов.
Появление ключевого слова &optional в списке аргументов указывает, что последующие аргументы могут быть опущены (опущенные аргументы по умолчанию имеют значение nil). Не следует писать &optional при вызове функции.
Ключевое слово &rest (которое должно следовать за единственным именем аргумента) указывает, что может следовать любое количество аргументов. Единственное имя аргумента, следующего за &rest, получает в качестве значения список всех оставшихся аргументов, переданных в функцию. Не следует писать &rest при вызове функции.
Вот описание воображаемой функции foo:
- Функция: foo целое1 &optional целое2 &rest целые
-
Функция
fooвычитает целое1 из целое2, а затем складывает все остальные аргументы к результату. Если целое2 не указано, то по умолчанию используется число 19.(foo 1 5 3 9) ⇒ 16 (foo 5) ⇒ 14В более общем случае,
(foo w x y…) ≡ (+ (- x w) y…)
По соглашению, любой аргумент, имя которого содержит имя типа (например, целое, целое1 или буфер), ожидается того типа. Множественное число типа (например, буферы) часто означает список объектов этого типа. Аргумент с именем объект может быть любого типа. (Список типов объектов Emacs см. в Типах данных Lisp.) Аргумент с любым другим видом имени (например, новый-файл) специфичен для функции; если у функции есть строка документации, тип аргумента должен быть описан там (см. Документацию).
См. Выражения лямбда, для более подробного описания аргументов, изменённых &optional и &rest.
Описание команд, макросов и специальных форм имеет тот же формат, но слово «Функция» заменяется соответственно на «Команда», «Макрос» или «Специальная форма». Команды — это просто функции, которые можно вызывать интерактивно; макросы обрабатывают свои аргументы по-другому, чем функции (аргументы не вычисляются), но представляются так же.
В описаниях макросов и специальных форм используется более сложная нотация для указания необязательных и повторяющихся аргументов, потому что они могут разбивать список аргументов на отдельные аргументы более сложными способами. «[необязательный-арг]» означает, что необязательный-арг является необязательным, а «повторяющиеся-арг…» обозначает ноль или более аргументов. Скобки используются, когда несколько аргументов сгруппированы в дополнительные уровни структуры списка. Вот пример:
- Специальная форма: count-loop (переменная [от до [шаг]]) тело…
-
Эта воображаемая специальная форма реализует цикл, который выполняет формы тело, а затем увеличивает переменную переменная на каждой итерации. На первой итерации переменная имеет значение от; на последующих итерациях она увеличивается на единицу (или на шаг, если он задан). Цикл завершается до выполнения тело, если переменная равна до. Вот пример:
(count-loop (i 0 10) (prin1 i) (princ " ") (prin1 (aref vector i)) (terpri))
Если от и до опущены, переменная привязывается к значению
nilперед началом цикла, и цикл завершается, если переменная является не-nilв начале итерации. Вот пример:(count-loop (done) (if (pending) (fixit) (setq done t)))В этой специальной форме аргументы от и до являются необязательными, но должны быть оба присутствовать или оба отсутствовать. Если они присутствуют, шаг может быть необязательно указан. Эти аргументы сгруппированы с аргументом переменная в список, чтобы отличить их от тело, которое включает в себя все остальные элементы формы.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/A-Sample-Function-Description.html