오늘 유연한 표현식 입력의 합계를 계산하기 위해 시그마 매크로를 작성하고 싶습니다.
아래 코드는 오늘 오후에 작성되었습니다. 그러나 그것은 내 목적에 따라 작동하지 않습니다.
(defmacro sigma (exp ll)
`(+ ,@(loop for i in ll collect
(progn (setf (elt exp 1) i)
(print exp)
exp)))
)
>>(pprint (macroexpand-1 '(sigma (+ 1 2) (2 3 4))))
>>(+ 2 2)
(+ 3 2)
(+ 4 2)
(+ (+ 4 2) (+ 4 2) (+ 4 2))
가 나는 (+ (+ 2 2) (+ 3 2) (+ 4 2))
하지만 loop collect
나에게 이상한 대답을 작동합니다.
왜 이런 식으로 작동합니까? 이 문제를 해결할 수있는 방법이 있습니까?
, 그는 루프를 통해 매번 동일한'exp' 오브젝트를 수집하고 있습니다. – Barmar
@Barmar 한 번 'NCONC'-ed는 두 번 크기의리스트를 얻기 위해 두 번 동일한 인수를 기억했습니다 :-) – Sylwester