总结一个清单
该降低函数可以被用来概括在一个列表中的元素。
(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)))