次: , 前: Forms, 上: Forms


8.2.1 自己評価型フォーム

自己評価型フォーム(self-evaluating form)とは、 リストでもシンボルでもない任意のフォームのことです。 自己評価型フォームはそれ自身に評価され、 評価結果は評価されるオブジェクトと同じものです。 つまり、数25は25と評価され、 文字列"foo"は文字列"foo"と評価されます。 同様に、ベクトルを評価してもベクトルの個々の要素を評価することはありません。 その内容をまったく変更することなく、同じベクトルを返します。

     
     '123               ; 評価していない数
          => 123
     
     123                ; 普通どおり評価。結果は同じ
          => 123
     
     (eval '123)        ; 『手で』評価。結果は同じ
          => 123
     
     (eval (eval '123)) ; 2回評価してもなにも変わらない
          => 123

Lispコードにおいては、数、文字、文字列、さらにベクトルでさえも、 それらが自己評価型である事実を利用して書くのが普通です。 しかし、入力構文を持たない型については、このようにしません。 というのは、それらをテキストとして書く方法がないからです。 そのような型を含むLisp式を構成するには、Lispプログラムを使います。

     
     ;; バッファオブジェクトを含む式を作る
     (setq print-exp (list 'print (current-buffer)))
          => (print #<buffer eval.texi>)
     
     ;; それを評価する
     (eval print-exp)
          -| #<buffer eval.texi>
          => #<buffer eval.texi>