haw*_*eye 2 reduce scala clojure
在Scala的Collections库中 - 我们看到具有reduceOption方法的Seq类:
def reduceOption[A1 >: A](op: (A1, A1) ? A1): Option[A1]
Run Code Online (Sandbox Code Playgroud)
使用指定的关联二元运算符减少此序列的元素(如果有)."
这有另一个很好的解释:
这里谈到
reduceOption保存一天!如果reduce因为集合是空会失败,它只会返回一个None,而是和一个Some(returnvalue)用于非空的集合.
我的问题是:Scala的seq.reduceOption的Clojure相当于什么?
它简称为reduce:
user> (reduce + (range 1e6))
499999500000
user> (reduce + [])
0
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,零的结果来自于加法的标识值为零的事实,因此如果您调用+没有参数的函数,它将返回0.因为*返回值将是1.这要求您传递的函数能够处理使用零个,一个或两个参数调用的函数.您可以通过将初始值指定为第三个参数来防止此行为,在这种情况下,如果列表为空,则永远不会调用reduce函数.
user> (reduce * -1 [])
-1
Run Code Online (Sandbox Code Playgroud)
Reduce在调用支持此类的集合(如向量)时也使用forkjoin框架.