This post got me rereading some of on lisp around page 223, and I noticed asetf, an anaphoric setf that you'd use instead of zap.
From page 236: "One of the advantages of asetf is that it makes it possible to define a large class of macros on generalized variables without worrying about multiple evaluation." So you could use it instead of once-only vars (http://arclanguage.org/item?id=13342) in some situations.