place-modifiers essentially gives access to hundreds of modify-macros through one single macro: MODIFY.

3 trivial examples (many more in the README):

(let ((place 7)) (modify (1+ place)) place) == (let ((place 7)) (incf place) place) => 8 (let ((place '(old))) (modify (cons 'new place)) place) == (let ((place '(old))) (push 'new place) place) => (NEW OLD) ;; Reminder for newbies: STRING-EQUAL is case-insensitive comparison. (let ((place '("hello" "hi"))) (modify (adjoin "HELLO" place :test #'string-equal)) place) == (let ((place '("hello" "hi"))) (pushnew "HELLO" place :test #'string-equal) place) => ("hello" "hi")

place-modifiers is in Quicklisp:

(ql:quickload "place-modifiers")

See the project's home for further information. Nearly-complete documentation is in the README.
This library is in the Public Domain. See the UNLICENSE file for details.

language extension convenience library