Scala euler项目素数和Stream.view之和

Scala euler项目素数和Stream.view之和,scala,Scala,看着Euler solutions的项目,我对如何在“问题10”的解决方案中使用视图感到有点困惑 计算200万以下所有素数之和。” 建议的解决办法是: lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find( j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get) val r = ps.view.takeWhile(

看着Euler solutions的项目,我对如何在“问题10”的解决方案中使用视图感到有点困惑 计算200万以下所有素数之和。”

建议的解决办法是:

lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find(
    j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get)
val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
有人能解释一下为什么它们不同吗?

欢迎使用Scala 2.8.1.final版(Java HotSpot(TM)客户端虚拟机,Java 1.6.024)。
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find(
     |     j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get)
ps: Stream[Int] = <lazy>

scala> val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922

scala> val r = ps.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922
键入要计算的表达式。 键入:有关详细信息的帮助。 scala>lazy val ps:Stream[Int]=2#:::ps.map(i=>Stream.from(i+1).find( |j=>ps.takeWhile(k=>k*k0)).get) ps:Stream[Int]= scala>val r=ps.view.takeWhile(<2000000).foldLeft(0L)(u+uu) r:Long=142913828922 scala>val r=ps.takeWhile(<2000000)。折叠英尺(0L)(u+u000) r:Long=142913828922
我想这是个bug。。。流似乎是一个“高维护日期”。什么scala版本?我在2.8.0和2.8.1版本中获得了142913828922,包括视图和非视图版本…$scala-version scala code runner version 2.8.1.final--版权所有2002-2010,LAMP/EPFL$java-version java version“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04-307-10M3261)java热点(TM)64位服务器虚拟机(构建17.1-b03-307,混合模式)哦,看,有了一个新的回复,我在两方面都得到了相同的结果(谢谢……在我上面的评论中,我指出这是一个新的repl,所以很明显这是一个repl或scala错误,很难复制。
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find(
     |     j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get)
ps: Stream[Int] = <lazy>

scala> val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922

scala> val r = ps.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922