Я ищу способ изменить значение свойства в списке свойств, умножив его на заданный коэффициент, аналогично использованию incf для добавления к значению.
С помощью incf я мог бы сказать:
(let ((seq '(:x 10 :y 3)))
(incf (getf seq :y) 3)
seq)
-> (:x 10 :y 5)
Используя макрос, я мог бы получить результат следующим образом, но здесь дважды используется getf:
(defmacro multf (place val)
`(setf ,place (* ,place ,val)))
(let ((seq '(:x 10 :y 3)))
(multf (getf seq :y) 2)
seq)
-> (:x 10 :y 6)
Как мне сделать это, чтобы получить тот же результат, используя getf только один раз?
Может быть, есть пакеты с таким функционалом, но я не нашел в сети. Любая помощь приветствуется! Это не домашнее задание, я просто пытаюсь оптимизировать свой код, и мне любопытно лучше понять язык. Я читал о setf-expders и compiler-macros, но не знаю, применимы ли они здесь и как их использовать.