Имена многих стандартных функций можно использовать для
указания места. В примере выше это были 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))