incf を使用して値を追加するのと同様に、特定の係数を掛けてプロパティ リスト内のプロパティ値を変更する方法を探しています。
incf を使用すると、次のように言えます。
(let ((seq '(:x 10 :y 3)))
(incf (getf seq :y) 3)
seq)
-> (:x 10 :y 5)
マクロを使用すると、次の方法で結果を取得できますが、これは getf を 2 回使用します。
(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 を 1 回だけ使用して同じ結果を得るには、どうすればよいでしょうか?
この機能を備えたパッケージがあるかもしれませんが、ネットで見つけることができませんでした。どんな助けでも大歓迎です!これは宿題ではありません。コードを最適化しようとしているだけで、言語をよりよく理解したいと思っています。setf-expanders と compiler-macros について読みましたが、それらがここに適用されるかどうか、およびそれらを使用する方法がわかりません。