我正在尝试过滤一个带有谓词的流,但是当我尝试将流转换为包含一个元素的列表时,我收到了一个错误。
def machine(n:Int) = if (n==0) List(0) else List(n/2,n/3,n/4)
def greater(n:Int) = machine(n).sum > n
val d: Stream[Int] = 2 #:: d.map(_+1).filterNot(greater)
scala> d.take(11).toList
res41: List[Int] = List(2,3,4,5,6,7,8,9,10,11)
//12 is the first number for which greater will return true
scala> d.take(12).toList
//Returns a ton of scala.collection.immutable.Stream errors有人能给我解释一下这里到底出了什么问题吗?谢谢。
发布于 2013-03-30 23:48:30
代码以递归方式工作。当你用完了流中的项目时,递归不会给你带来任何好处,最终你会用完堆栈空间。(当您请求的条目超过流中可能存在的条目时,您期望发生什么,因为您过滤掉了所有大的条目?您应该得到堆栈溢出或非终止(挂起),对吗?)
https://stackoverflow.com/questions/15720333
复制相似问题