Escrevendo uma macro destrutiva ou função como incf?

Eu preciso de umincf função que faz alguns limites de verificação durante o incremento:

val := val + delta
if val >= 1.0
   then return 1.0
   else return val

Eu posso escrever isso usandoincf:

(defun incf-bounded(val delta)
  (incf val delta)
  (if (>= val 1.0) 1.0 val))    

Nesse caso, eu preciso usar isso como(setf x (incf-bounded x delta)). Mas como eu escrevo um que eu possa usar como(incf-bounded x delta), ou seja, ondex será modificado?

questionAnswers(2)

yourAnswerToTheQuestion