Spec-Zone.ru › Elisp

Специальные формы

Специальная форма — это примитив, специально помеченный таким образом, чтобы не все его аргументы вычислялись. Большинство специальных форм определяют управляющие конструкции или выполняют привязку переменных — то, чего функции делать не могут.

У каждой специальной формы есть собственные правила, определяющие, какие аргументы вычисляются, а какие используются без вычисления. Вычисление конкретного аргумента может зависеть от результатов вычисления других аргументов.

Если первый символ выражения — это символ специальной формы, выражение должно соответствовать правилам этой специальной формы; в противном случае поведение 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

см. раздел Лямбда-выражения

let
let*

см. раздел Локальные переменные

or

см. раздел Конструкции для объединения условий

prog1
prog2
progn

см. раздел Последовательное выполнение

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API