Spec-Zone.ru › Elisp

Введение в оценку

Интерпретатор Lisp, или оценщик, — это часть Emacs, которая вычисляет значение выражения, предоставленного ему. Когда вызывается функция, написанная на Lisp, оценщик вычисляет значение функции, оценивая выражения в теле функции. Таким образом, выполнение любой программы Lisp фактически означает выполнение интерпретатора Lisp.

Объект Lisp, предназначенный для оценки, называется формой или выражением7. Тот факт, что формы являются объектами данных, а не просто текстом, является одним из фундаментальных различий между языками типа Lisp и типичными языками программирования. Любой объект может быть оценен, но на практике чаще всего оцениваются только числа, символы, списки и строки.

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

Очень часто читают форму Lisp, а затем оценивают форму, но чтение и оценка — это отдельные действия, и каждое из них может выполняться самостоятельно. Чтение само по себе ничего не оценивает; оно преобразует печатное представление объекта Lisp в сам объект. От вызывающей стороны read зависит, является ли этот объект формой для оценки или служит какой-то совершенно другой цели. См. Функции ввода.

Оценка — это рекурсивный процесс, и оценка формы часто включает оценку частей внутри этой формы. Например, при оценке формы вызова функции, такой как (car x), Emacs сначала оценивает аргумент (подформу x). После оценки аргумента Emacs выполняет функцию (car), и если функция написана на Lisp, выполнение происходит путём оценки тела функции (в этом примере, однако, car не является функцией Lisp; это примитивная функция, реализованная на C). См. Функции для получения дополнительной информации о функциях и вызовах функций.

Оценка происходит в контексте, называемом окружением, которое состоит из текущих значений и связываний всех переменных Lisp (см. Переменные).8 Всякий раз, когда форма ссылается на переменную без создания для неё новой связи, переменная оценивается по значению, заданному текущим окружением. Оценка формы также может временно изменить окружение, связав переменные (см. Локальные переменные).

Оценка формы может также внести изменения, которые сохраняются; эти изменения называются побочными эффектами. Примером формы, порождающей побочный эффект, является (setq foo 1).

Не путайте оценку с интерпретацией командных клавиш. Цикл команд редактора преобразует ввод с клавиатуры в команду (взаимодействующую вызываемую функцию) с использованием активных наборов клавиш, а затем использует call-interactively для выполнения этой команды. Выполнение команды обычно включает оценку, если команда написана на 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/Intro-Eval.html

Spec-Zone.ru

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