. , , . .
. -, push
- , setf
. , setf
getf-string-equal
. .
(defsetf getf-string-equal (plist indicator) (value)
(let ((i (gensym))
(rest (gensym))
(match (gensym)))
`(let ((,match (loop
for (,i . ,rest) on ,plist by #'cddr
when (string-equal ,i ,indicator)
return ,rest)))
(if ,match
(setf (car ,match) ,value)
nil))))
. defsetf
. plist
indicator
- , , value
- . ; . . gensym
.
, , . , cons, . , car
, . , , .
, . cons
, car
. if
. `(setf ,plist ,value)
, . defsetf
, . , , , , define-setf-expander
, defsetf
. , setf
, , , .