Common Lisp에서는 setf macro가 container에 대해 mutation할 때, 매크로로 처리한다. 즉, container에 대한 read 함수와 별개로 write 함수가 구현되어 있어야 한다. (여기서는 rplaca) 예제: * (let ((a (list 1 2))) (setf (nth 0 a) 3) a) (3 2) * (macroexpand '(setf (nth 0 a) 3)) (LET* ((#:LIST (NTHCDR 0 A)) (#:NEW 3)) (SB-KERNEL:%RPLACA #:LIST #:NEW)) Clojure에서는 mutation이 필요한 것은 atom 등으로 되어 있어야 한다. 그래서 container에 대해 read 함수만 있고 특별한 mutation 함수가 없어도 된..