以下に、整数のビットに沿って反復するマクロがあります。次のように、ループの収集機能を統合したいと思います。
(loop for x in '(a b c d e)
for y in '(1 2 3 4 5)
collect (list x y) )
上記を実現するには、以下のマクロをどのように変更すればよいですか?
(defmacro do-bits ((var x) &rest body)
"Evaluates [body] forms after binding [var] to each set bit in [x]"
(let ((k (gensym)))
`(do ((,k ,x (logand ,k (1- ,k))))
((= ,k 0))
(let ((,var (logand ,k (- ,k))))
,@body))))