Jungs.Probleme beim Schreiben `loop ... collect` in Makro
Heute möchte ich Sigma Makro schreiben, um die Summe aus dem flexiblen Ausdruck Eingang zu berechnen.
Der Code unten ist ich heute Nachmittag geschrieben. Aber es funktioniert nicht meinem Zweck folgen.
(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))
Ich will es funktioniert (+ (+ 2 2) (+ 3 2) (+ 4 2))
aber loop collect
mir die seltsame Antwort geben.
Warum funktioniert das so? Habe ich einige Methoden, um das zu beheben?
Auch wenn er nicht mutiert waren es, Er sammelt jedes Mal das gleiche 'exp'-Objekt durch die Schleife. – Barmar
@Barmar Ich erinnere mich, ich einmal 'NCONC'-ed das gleiche Argument zweimal, um eine doppelt große Liste zu bekommen :-) – Sylwester