Специальные формы
Специальная форма — это примитив, специально помеченный таким образом, чтобы не все его аргументы вычислялись. Большинство специальных форм определяют управляющие конструкции или выполняют привязку переменных — то, чего функции делать не могут.
У каждой специальной формы есть собственные правила, определяющие, какие аргументы вычисляются, а какие используются без вычисления. Вычисление конкретного аргумента может зависеть от результатов вычисления других аргументов.
Если первый символ выражения — это символ специальной формы, выражение должно соответствовать правилам этой специальной формы; в противном случае поведение Emacs не определено (хотя он не завершит работу аварийно). Например, ((lambda (x) x . 3) 4) содержит подвыражение, начинающееся с lambda, но не являющееся корректным выражением lambda, поэтому Emacs может выдать ошибку, вернуть 3, 4 или nil либо повести себя иначе.
- Функция: special-form-p object
Этот предикат проверяет, является ли его аргумент специальной формой, и возвращает
t, если это так, иnilв противном случае.
Ниже в алфавитном порядке приведён список всех специальных форм Emacs Lisp со ссылками на их описания.
and-
см. раздел Конструкции для объединения условий
catch-
см. раздел Явные нелокальные выходы:
catchиthrow cond-
см. раздел Условные конструкции
condition-case-
см. раздел Написание кода для обработки ошибок
defconst-
см. раздел Определение глобальных переменных
defvar-
см. раздел Определение глобальных переменных
function-
см. раздел Анонимные функции
if-
см. раздел Условные конструкции
interactive-
см. раздел Интерактивный вызов
lambda-
см. раздел Лямбда-выражения
letlet*-
см. раздел Локальные переменные
or-
см. раздел Конструкции для объединения условий
prog1prog2progn-
см. раздел Последовательное выполнение
quote-
см. раздел Цитирование
save-current-buffer-
см. раздел Текущий буфер
save-excursion-
см. раздел Сохранение и восстановление состояния
save-restriction-
см. раздел Ограничение области видимости
setq-
см. раздел Установка значений переменных
setq-default-
см. раздел Создание и удаление привязок, локальных для буфера
unwind-protect-
см. раздел Нелокальные выходы
whileсм. раздел Итерация
Примечание о Common Lisp: Ниже приведены некоторые сопоставления специальных форм в GNU Emacs Lisp и Common Lisp.
setq,ifиcatchявляются специальными формами как в Emacs Lisp, так и в Common Lisp.save-excursion— специальная форма в Emacs Lisp, но в Common Lisp она отсутствует.throw— специальная форма в Common Lisp (поскольку она должна поддерживать передачу нескольких значений), но в Emacs Lisp это функция (так как в нём нет нескольких значений).
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/Special-Forms.html