递归很酷,但是当您被高阶库函数包围时,它有点低级。我试图避免为依赖于生成的最后一个值的进程编写递归函数。
我通常会iterate
在 Clojure 中使用函数,而不是最后一个值和当前参数的“压缩”列表。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 的迭代更难让我的大脑环绕。