17:35:37pjbtempate: an alternative, is to pass a "place" to your function. If you write a macro, you must mind using get-setf-expansion. But you can pass a place to a function by way of a closure.
17:35:58pjb(extract-one list (lambda (new-list) (setf list new-list)))
17:36:08tempatepjb: I think I'm going to write a class. It'll most likely come in handy in the future.