相关疑难解决方法(0)

foldLeft v.collyRight - 这有关系吗?

以前,Nicolas Rinaudo回答了我关于Scala 列表的问题foldRight总是使用foldLeft?

目前正在研究Haskell,我的理解是,在(prepend)可以使用(append)的情况下foldRight应该优先考虑.foldLeft::++

据我所知,原因是性能 - 前者发生在O(1),即在前面添加一个项目 - 恒定时间.而后者需要O(N),即遍历整个列表并添加项目.

在Scala中,因为foldLeft是在以下方面实现的foldRight,不使用的好处:+++foldRight连问题,因为foldRight被逆转,然后foldLeft'd

例如,考虑这个简单的fold..操作,只需按顺序返回列表的元素.

foldLeft折叠每个元素,将每个项目添加到列表中:+.

scala> List("foo", "bar").foldLeft(List[String]()) { 
                                                    (acc, elem) => acc :+ elem }
res9: List[String] = List(foo, bar)
Run Code Online (Sandbox Code Playgroud)

foldRight::在每个项目上使用运算符执行foldLeft ,然后反转.

scala> List("foo", "bar").foldRight(List[String]()) { 
                                                    (elem, acc) => elem :: acc }
res10: List[String] = List(foo, bar)
Run Code Online (Sandbox Code Playgroud)

实际上,在Scala中哪个foldLeft …

haskell scala

18
推荐指数
4
解决办法
1万
查看次数

标签 统计

haskell ×1

scala ×1