Abh*_*kar 3 scala stream lazy-evaluation
在Scala中,isEmtpy对Stream类实例的调用方法是否会导致流完全评估?我的代码是这样的:
import Stream.cons
private val odds: Stream[Int] = cons(3, odds.map(_ + 2))
private val primes: Stream[Int] = cons(2, odds filter isPrime)
private def isPrime(n: Int): Boolean = n match {
case 1 => false
case 2 => true
case 3 => true
case 5 => true
case 7 => true
case x if n % 3 == 0 => false
case x if n % 5 == 0 => false
case x if n % 7 == 0 => false
case x if (x + 1) % 6 == 0 || (x - 1) % 6 == 0 => true
case x => primeDivisors(x) isEmpty
}
import Math.{sqrt, ceil}
private def primeDivisors(n: Int) =
primes takeWhile { _ <= ceil(sqrt(n))} filter {n % _ == 0 }
Run Code Online (Sandbox Code Playgroud)
那么,isEmpty对线路的调用是否case x => primeDivisors(x) isEmpty会导致所有主要除数被评估或只是第一个?
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |