elisp: Self-Evaluating Forms

 
 9.2.1 Self-Evaluating Forms
 ---------------------------
 
 A “self-evaluating form” is any form that is not a list or symbol.
 Self-evaluating forms evaluate to themselves: the result of evaluation
 is the same object that was evaluated.  Thus, the number 25 evaluates to
 25, and the string ‘"foo"’ evaluates to the string ‘"foo"’.  Likewise,
 evaluating a vector does not cause evaluation of the elements of the
 vector—it returns the same vector with its contents unchanged.
 
      '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
 
    It is common to write numbers, characters, strings, and even vectors
 in Lisp code, taking advantage of the fact that they self-evaluate.
 However, it is quite unusual to do this for types that lack a read
 syntax, because there’s no way to write them textually.  It is possible
 to construct Lisp expressions containing these types by means of a Lisp
 program.  Here is an example:
 
      ;; 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>