5
object E7 {
def next_prime(primes: List[Int]) = primes match {
case [email protected](h :: t) => {
// Version 1
val rpq = ps.reverse.exists _
// Version 2
val rpq = ps.reverse.exists(_)
(Iterator.from(h + 1).find((v) => ! rpq(v % _ == 0)): @unchecked) match {
case Some(v) => v :: ps
}
}
case Nil => List(2)
}
val primes = Iterator.iterate(List[Int]())(next_prime)
def main(args: Array[String]) {
println(primes.drop(20001).next.head)
}
}
첫 번째 버전은 초당 19.3 초가 소요됩니다. 차이점이 뭐야?부분적으로 적용된 기능 사용 성능 문제
편집 : 스칼라 버전 2.9.2 (자바 핫스팟 (TM) 64 비트 서버 VM, 자바 1.7.0_21) 두 번째 인 반면 첫 번째는
{ val temp = ps.reverse; (x: Int) => temp.exists(x) }
로 해석됩니다