reduce
的行为由以下情况定义:
val
:coll
为空:以无参数方式调用 f
,调用所得的值为返回值。coll
只有一个元素:不调用 f
,直接将那个元素用作返回值。coll
有多于一个元素:将 coll
的前两个元素应用到 f
,得到的结果再和 coll
的第三个元素一起应用到 f
,以此类推。val
:coll
为空:不调用 f
,直接返回 val
。coll
不为空:将 val
和 coll
的第一个元素应用到 f
,得到的结果再和 coll
的第二个元素一起应用到 f
,以此类推。f
应该是一个接受两个参数的函数,如果处理的 coll
可能为空,那么它还应该能进行无参数调用。
user=> (reduce + []) ; coll 为空, + 返回无参数调用结果 0
0
user=> (reduce + (range 10)) ; coll 不为空
45
user=> (reduce + 0 (range 10)) ; coll 不为空,且给定 val
45