मैं खुद के संदर्भ में एक धारा परिभाषित कर रहा हूं (एक पुनरावर्ती परिभाषा)। स्ट्रीम के दूसरे तत्व तक पहुंचने का प्रयास करते समय, StackOverflowError
फेंक दिया जाता है। स्कैला कंसोल से कोड:रिकर्सिव स्ट्रीम फेंकता है StackOverflowError
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...
मैं स्टैक ओवरफ़्लो के कारण को समझने में असमर्थ हूं। चूंकि धाराएं स्वाभाविक रूप से आलसी हैं, रिकर्सिव मैपिंग काम करनी चाहिए।
इस परिदृश्य में क्या गलत है?
मैं स्कैला संस्करण 2.8.0.आरसी 2 का उपयोग कर रहा हूं।
यह http://lampsvn.epfl.ch/trac/scala/ticket/2634 है –