【发布时间】:2013-06-27 05:46:28
【问题描述】:
在查看Functional Programming in Scala 时,我遇到了以下代码 sn-p:
def foldRight[A](z: => B)(f: (A,=>B) => B):B = uncons match {
case Some((h,t)) => f(h,t.foldRight(z)(f))
case None => z
}
然后作者继续陈述以下内容:
这看起来与我们为 List 编写的 foldRight 非常相似,但是 注意我们的组合函数 f 在它的第二个中是非严格的 范围。如果 f 选择不计算它的第二个参数,这 提前终止遍历。我们可以通过使用 foldRight 来看到这一点 实现存在,它检查流中是否有任何值 匹配给定的谓词。
然后作者陈述如下:
def exists(p: A => Boolean): Boolean =
foldRight(false)((a, b) => p(a) || b)
我的问题是组合函数 f 如何导致 exists 方法提前终止?我认为我无法从文本中理解这是如何发生的。
【问题讨论】:
标签: scala functional-programming lazy-evaluation fold