将平方和应用于带减号的多个数字



我将平方和平方和定义为:

(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更快,因为它不会生成中间数据结构。

最新更新