+
+;;; Dependent qualities
+(defmacro define-optimization-quality
+ (name expression &optional documentation)
+ `(eval-when (:compile-toplevel :load-toplevel :execute)
+ (let ((acons (assoc ',name *policy-dependent-qualities*))
+ (item (make-policy-dependent-quality
+ :name ',name
+ :expression ',expression
+ :getter (lambda (policy) (policy policy ,expression))
+ :values-documentation ',documentation)))
+ (if acons
+ (setf (cdr acons) item)
+ (push `(,',name . ,item) *policy-dependent-qualities*)))
+ ',name))