Spec-Zone.ru › Elisp

Самооценивающие формы

Самооценивающая форма — это любая форма, которая не является списком или символом. Самооценивающие формы оцениваются до самих себя: результат оценки — тот же объект, который был оценен. Таким образом, число 25 оценивается как 25, а строка "foo" оценивается как строка "foo". Аналогично, оценка вектора не приводит к оценке элементов вектора — он возвращает тот же вектор с неизменным содержимым.

'123               ; A number, shown without evaluation.
     ⇒ 123
123                ; Evaluated as usual—result is the same.
     ⇒ 123
(eval '123)        ; Evaluated "by hand"—result is the same.
     ⇒ 123
(eval (eval '123)) ; Evaluating twice changes nothing.
     ⇒ 123

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

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

;; Build an expression containing a buffer object.
(setq print-exp (list 'print (current-buffer)))
     ⇒ (print #<buffer eval.texi>)
;; Evaluate it.
(eval print-exp)
     -| #<buffer eval.texi>
     ⇒ #<buffer eval.texi>

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/Self_002dEvaluating-Forms.html

Spec-Zone.ru

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