我将平方和平方和定义为:
(defun square(x)
(* x x))
(defun sum-of-squares (x y)
(+ (square x) (square y)))
然后将其应用于带有reduce:的数组
(reduce 'sum-of-squares '(2 2 2))
但得到的结果是68而不是12。
怎么了?
减少
(sum-of-squares (sum-of-squares 2 2) 2)
哪个是
(sum-of-squares 8 2)
是64+4
你可以用得到你期望的结果
(reduce #'+ (mapcar #'square '(2 2 2)))
或
(reduce #'(lambda (x y) (+ x (square y))) '(2 2 2) :initial-value 0)
或者通过将CCD_ 1定义为采用任意数量的自变量。
我看到你的评论:
有什么改进平方和的想法吗?
(defun sum-of-squares (&rest lst)
(let ((value 0))
(dolist (element lst value)
(setq value (+ (square element) value)))))
(sum-of-squares 2 2 2)
;; 12
它比reduce . mapcar
更快,因为它不会生成中间数据结构。