Loops LISP循环列表

Loops LISP循环列表,loops,lisp,common-lisp,Loops,Lisp,Common Lisp,我有一个函数“幂”,它给了我数字的平方,其他函数需要对列表中每个数字的平方求和。但它告诉我未定义的函数,我和我真的不能让它工作 (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) 示例: CL-USER 12 > (loop for i in '(1 2 3 4) sum (power i))

我有一个函数“幂”,它给了我数字的平方,其他函数需要对列表中每个数字的平方求和。但它告诉我未定义的函数,我和我真的不能让它工作

(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)
示例:

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

它之所以给你这个错误,是因为你把
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)

什么是
(ii)
?函数调用?为什么?什么是打印?试着记住如何用Lisp编写函数调用。还要考虑什么应该是函数调用,什么不应该。什么(ii)?你是说权力(i)?这是一个函数调用,但不是在Lisp中<代码>电源(i)不是Lisp中的函数调用。Lisp中函数调用的语法是什么?prints s应该打印s的值。。。。但它不起作用……你会如何编写函数调用?