【发布时间】:2012-08-23 03:41:03
【问题描述】:
递归很酷,但是当你被高阶库函数包围时,它有点低级。我试图避免为依赖于生成的最后一个值的进程编写递归函数。
我通常会在 Clojure 中使用 iterate 函数,而不是最后一个值和当前参数的“压缩”列表。 Scala 的集合 API 中是否有等效函数?
下面是一些疯狂的伪代码中的一个抽象示例的尝试:
说你有
- 输入列表:
Seq(1,2,3) -
您对生成的最后一个值和列表中的下一项执行的一些操作:
lastValue ^ 2 + nextInt(i)
并且您想累积所有生成的值。
我试图避免写类似的东西:
def f(ls:Seq[Int]):Seq[Float] = {
def g(pos:Int, lastGen:Float):Seq[Float] = {
val v = gen(lastGen, ls(pos))
if( end(v) )
Seq(v)
else
Seq(v) ++ g(pos+1, v)
}
f(0, 1)
}
我在 Haskell 中定义 Fibonacci 的惰性流版本时看到了类似的东西,因此假设我可以使用引用自身的惰性流,但与 Clojure 的迭代相比,这更难让我的大脑思考。
【问题讨论】: