scala - 你如何使用标准库编写 foldWhile?

标签 scala haskell functional-programming

是否可以使用scala标准库编写如下代码?

def foldWhile[A,B](s: Stream[A])(z: B)(w: B ⇒ Boolean)(op: (B, A) ⇒ B): B = {
    if(s.isEmpty) z
    else {
        if(w(z)) foldWhile(s.tail)(op(z, s.head))(w)(op)
        else z
    }
}

foldWhile(Stream(1,2,3,4))(0)(_ <= 3)((acc, v) => acc + v)

最佳答案

虽然我个人认为它是肮脏的,但你可以在弃牌中间获得返回:

def foldWhile[A,B](s: TraversableOnce[A])(z: B)(w: B ⇒ Boolean)(op: (B, A) ⇒ B): B = 
  s.foldLeft[B](z)((b,a) ⇒ if(w(b)) op(b,a) else return b)

关于scala - 你如何使用标准库编写 foldWhile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20289751/

相关文章:

scala - RDD[Array[String]] 到 Dataframe

scala - 如何避免在自定义数据源中对数组中的字节进行装箱?

haskell - QuasiQuote 带参数

exception - Haskell:处理类型和异常

algorithm - 功能性 "All except one"

scala - 为混合特性的所有类构建操作

scala - sbt : findbugs, scalastyle 中的 SonarQube 运行者

parsing - uu-parsinglib 中的计划外贪婪行为

list - 如何访问我添加的带有缺点的列表元素(:) operator?

algorithm - 如何改进这个列表算法?