Модифицирующие функции (модификаторы)

Имена многих стандартных функций можно использовать для указания места. В примере выше это были symbol-value, second и nth.

Они служат не только селекторами, но и модификаторами. В Коммон Лисп применяют термин writer, а сами функции называют также модифицирующими (англ. setfable).

Точнее, термин модифицирующий, следует относить к имени, а не к функции.

Указав выражение вида (setf символ) в defun, можно ввести новую модифицирующую функцию, тем самым расширив область применения обобщённого оператора присваивания.

Примеры
(defun first-first (tree)
  ;; Селектор, или reader
  (first (first tree)))

(defun (setf first-first) (value tree)
  ;; Модификатор, или writer
  ;; Новое значение value всегда идёт первым параметром
  (let ((node (first tree)))
    (setf (first node) value)))
    
(setq tree (list (list 10 11) (list 20 21)))
((10 11) (20 21))
(setf (first-first tree) 1)
1
tree
((1 11) (20 21))