Common-lisp似乎提供了"广义变量"允许以编程方式访问除名称(变量)之外的地方。举个简单的例子,
(setf (get 'object :property1) (1+ (get 'object :property1)))
增加(get 'object :property1)
处的值。但是,还有像(incf (get 'object :property1))
这样的破坏性宏可以更简洁地做同样的事情,因为这个地方只需要提一次。只要新值是某个地方旧值的函数,就会出现相同的模式。当场所访问者很复杂时,冗余可能会变得冗长且难以掌握(至少对我而言)。我想知道一个宏模式,用于编写我自己的破坏性宏来更改这些值,当新值是旧值的某个函数时。我注意到传递函数并不是一件简单的事情,因为访问器可能嵌入在任意数量的函数调用或其他lisp对象中。