我想要一种方便的方法来生成一个Iterable
,给定一个初始对象和一个从当前对象生成下一个对象的函数,它消耗 O(1) 内存(即,它不缓存旧结果;如果你想迭代一个第二次,必须再次应用该功能)。
似乎没有对此的库支持。在 Scala 2.8 中,该方法scala.collection.Iterable.iterate
具有签名
def iterate [A] (start: A, len: Int)(f: (A) ⇒ A) : Iterable[A]
因此它要求您提前指定您感兴趣的迭代函数应用程序的数量,而我对文档的理解是Iterable.iterate
实际上会立即计算所有这些值。另一方面,该方法scala.collection.Iterator.iterate
具有签名
def iterate [T] (start: T)(f: (T) ⇒ T) : Iterator[T]
看起来不错,但我们只得到一个Iterator
不能提供map
,filter
和朋友的所有便利的。
有没有方便的库方法来生产我想要的东西?
如果不,
有人可以建议这样做的“口语”Scala代码吗?
总而言之,给定一个初始 objecta: A
和一个 function f: A => A
,我想要一个TraversableLike
(例如,可能是一个Iterable
),它生成a, f(a), f(f(a)), ...
并使用 O(1) 内存, withmap
等filter
函数,它们也返回 O(1) in记忆。