LISP循环列表

时间:2015-03-29 16:47:58

标签: loops lisp common-lisp

我有一个功能“power”,它给出了数字的平方,其他功能需要对列表中的每个数字求和。但它告诉我未定义的功能我和我真的无法使它工作。

(defun power (x)
  (if (numberp x) (* x x) 0)
)
(defun sum (l)
  (loop for i in l do(setq s(+ (power (i)) s)))
    print s)

2 个答案:

答案 0 :(得分:0)

示例:

CL-USER 12 > (loop for i in '(1 2 3 4) sum (power i))
30

CL-USER 11 > (reduce #'+ '(1 2 3 4) :key #'power)
30

CL-USER 14 > (defun sum (l &aux (sum 0))
               (dolist (i l sum)
                 (incf sum (power i))))
SUM

CL-USER 15 > (sum '(1 2 3 4))
30

答案 1 :(得分:0)

它会给你这个错误,因为你把i放在括号中(编译器看作函数调用)...(power (i))...应该是...(power i)...。至于打印只是忽略打印语句和 让函数返回s的值,如下所示。

(defun power (x)
  (if (numberp x) (* x x) 0)
)
(defun sum (l)
  (setq s 0)
  (loop for i in l do
     (setq s (+ (power i) s)))
   s)