总结一个清单

降低函数可以被用来概括在一个列表中的元素。

(reduce '+ '(1 2 3 4))
;;=> 10

默认情况下, reduce 执行左关联缩减,这意味着总和 10 计算为

(+ (+ (+ 1 2) 3) 4)

首先对前两个元素求和,然后将结果(3)加到下一个元素(3)上以产生 6,然后将其加到 4,以产生最终结果。

这比使用 apply 更安全 (例如,在 **(apply’+’(1 2 3 4))中,**因为可以传递给 apply 的参数列表的长度是有限的(请参阅 call-arguments-limit ), reduce 将起作用只有两个参数的函数。

通过指定 from-end 关键字参数, reduce 将在另一个方向上处理列表,这意味着总和以相反的顺序计算。那是

(reduce '+ (1 2 3 4) :from-end t)
;;=> 10

正在计算

(+ 1 (+ 2 (+ 3 4)))