自己評価形式とは、リストやシンボルではないあらゆる形式のことである。自己評価形式はそれ自体を評価する。すなわち、評価結果は評価対象となったものと同じオブジェクトとなる。したがって、数値
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>