Специальные формы
Специальная форма — это примитивная функция, специально помеченная так, что её аргументы не все вычисляются. Большинство специальных форм определяют управляющие структуры или выполняют привязку переменных — вещи, которые функции не могут сделать.
Каждая специальная форма имеет свои правила, определяющие, какие аргументы вычисляются, а какие используются без вычисления. Вычисление конкретного аргумента может зависеть от результатов вычисления других аргументов.
Если первый символ выражения соответствует специальной форме, выражение должно следовать правилам этой специальной формы; в противном случае поведение Emacs не определено (хотя оно не вызовет сбой). Например, ((lambda (x) x . 3) 4) содержит подвыражение, начинающееся с lambda, но не является корректным выражением lambda, поэтому Emacs может сообщить об ошибке или вернуть 3 или 4 или nil, или может вести себя другими способами.
- Функция: special-form-p объект
Этот предикат проверяет, является ли его аргумент специальной формой, и возвращает
t, если это так,nilв противном случае.
Вот список всех специальных форм в Emacs Lisp в алфавитном порядке со ссылкой на описание каждой.
andcatchcondcondition-case-
см. Обработка ошибок
defconstdefvarfunctionifinteractivelambda-
см. Выражения лямбда
letlet*orprog1prog2prognquote-
см. Цитата
save-current-buffer-
см. Текущий буфер
save-excursion-
см. Экскурсии
save-restriction-
см. Сужение
setqsetq-defaultunwind-protectwhileсм. Итерация
Примечание 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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Special-Forms.html