首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归流抛出StackOverflowError

递归流抛出StackOverflowError
EN

Stack Overflow用户
提问于 2010-06-03 02:47:25
回答 1查看 1.2K关注 0票数 7

我正在定义一个流本身(一个递归定义)。当尝试访问流的第二个元素时,抛出StackOverflowError。scala控制台中的代码:

代码语言:javascript
复制
scala> val s1 = Stream.iterate(1)(identity _)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> lazy val s2 : Stream[Int]= Stream.cons(1, (s2, s1).zipped.map { _ + _ })
s2: Stream[Int] = <lazy>

scala> s1 take 5 print
1, 1, 1, 1, 1, empty
scala> s2(0)
res4: Int = 1

scala> s2(1)
java.lang.StackOverflowError
        at $anonfun$s2$1$$anonfun$apply$1.apply(<console>:9)
        at $anonfun$s2$1$$anonfun$apply$1.apply(<console>:9)
        at scala.Tuple2$Zipped$$anonfun$map$1.apply(Tuple2.scala:62)
        at scala.collection.immutable.Stream.foreach(Stream.scala:255)
        at scala.Tuple2$Zipped.map(Tuple2.scala:60)
        at $anonfun$s2$1.apply(<console>:9)
        at $anonfun$s2$1.apply(<console>:9)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:556)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:550)
        at scala.collection.immutable.Stream.foreach(Stream.scala:256)
        at scala.Tuple2$Zipped.map(Tuple2.scala:60)
        at $anonfun$s2$1.apply(<console>:9)
        at $anonfun$s2$1.apply(<console>:9)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:556)
        at scala.collection.immutable.Str...

我无法理解堆栈溢出的原因。由于流本质上是惰性的,因此递归映射应该可以工作。

这个场景有什么问题?

我使用的是Scala版本2.8.0.RC2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-03 03:07:52

问题是zipped并不是懒惰的--它实际上试图在那里计算映射。您可以使用zip做任何您想做的事情。

代码语言:javascript
复制
scala> val s1 = Stream.iterate(1)(identity _)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> lazy val s2: Stream[Int] = Stream.cons(1, (s2 zip s1).map {s=>s._1+s._2})
s2: Stream[Int] = <lazy>

scala> s2 take 5 print
1, 2, 3, 4, 5, empty
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2960605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档