【发布时间】:2015-12-05 10:34:13
【问题描述】:
如果递归几乎清晰,例如
def product2(ints: List[Int]): Int = {
@tailrec
def productAccumulator(ints: List[Int], accum: Int): Int = {
ints match {
case Nil => accum
case x :: tail => productAccumulator(tail, accum * x)
}
}
productAccumulator(ints, 1)
}
我不确定核心游程。根据Wikipedia article,“corecursion 允许程序生成任意复杂且可能无限的数据结构,例如流”。例如这样的构造
list.filter(...).map(...)
使得在filter 和map 操作之后准备临时流成为可能。
在filter 流之后将只收集过滤后的元素,然后在map 中我们将更改元素。正确的?
函数组合器是否对map filter 使用递归执行
有没有人在 Scala 中有很好的例子“比较递归和核心递归”?
【问题讨论】:
-
根据wiki定义,你的
product例子是 corecursion。product递归看起来像def product(ints: List[Int]): Int = ints match { case Nil => 1 case x :: xs => x * product(xs) } -
不——这里的例子不是 corecursion——它是一个用递归实现的折叠的特例。 - 在 Java-world 中,带有 corecursion 的东西例如是
Iterable<..> -
你的意思是 foldLeft 或 foldRight 是 corecursion 吗?
标签: scala function recursion functional-programming