Написание деструктивного макроса или функции вроде incf?

Мне нуженincf функция, которая выполняет проверку некоторых границ во время приращения:

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

Я могу написать это используя:incf

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

В таком случае мне нужно использовать это как(setf x (incf-bounded x delta)), Но как мне написать тот, который я могу использовать как(incf-bounded x delta)то есть гдеx будет изменен?

Ответы на вопрос(2)

Ваш ответ на вопрос