(cond
((and func (not (funcall func new-value)))
(warn "Rejected change to value of slot ~a of object ~a"
(slot-definition-name slot) obj)
(slot-value obj (slot-definition-name slot)))
(t
(cond
((and func (not (funcall func new-value)))
(warn "Rejected change to value of slot ~a of object ~a"
(slot-definition-name slot) obj)
(slot-value obj (slot-definition-name slot)))
(t