quote

下では修正してしまったので、簡単な例を書いておく。

(dotimes (x 10)
  (let ((counter '(0)))
    (format t "~A " (setf (car counter) (1+ (car counter))))))

ループごとにデータを与えているから毎回同じ値を示す気がするけど、実際はカウンタは増える。これは、quote中のリストが別のループでも同じものを参照してるため。評価してないから、中身は気にしない。(list 0)を簡単に書けるw という考えは間違いのようだ。


これを利用すれば、(eval '(func foo bar))と書いておいて、後から中身を修正できるが、動作の予測が非常に難しくなるので使わない方が賢明だろう。