gpt4 book ai didi

scala - 使用部分应用函数,性能问题

转载 作者:行者123 更新时间:2023-12-04 20:11:29 25 4
gpt4 key购买 nike

object E7 {
def next_prime(primes: List[Int]) = primes match {
case ps@(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)
}
}

第一个版本需要 3.6 秒才能完成,第二个 - 19.3 秒!有什么不同?

编辑:Scala 版本 2.9.2(Java HotSpot(TM) 64 位服务器 VM,Java 1.7.0_21)

最佳答案

第一个被解释为

{ val temp = ps.reverse; (x: Int) => temp.exists(x) }

而第二个被解释为
(x: Int) => ps.reverse.exists(x)

这解释了区别:在第二种情况下每次都必须反转,但在第一种情况下只需反转一次。我不确定规范中的哪个地方说这是您在每种情况下(或者如果确实如此)得到的结果。

关于scala - 使用部分应用函数,性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com