【发布时间】:2016-08-19 22:34:19
【问题描述】:
伙计们。
今天我想编写 sigma 宏来计算灵活表达式输入的总和。
下面的代码是我今天下午写的。但它不符合我的目的。
(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 给我一个奇怪的答案。
为什么会这样?我有什么方法可以解决这个问题吗?
【问题讨论】:
标签: macros lisp common-lisp clisp