加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:38:25 所属栏目:安全 来源:网络整理
导读: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) mat
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)

这解释了不同之处:你必须在第二种情况下每次反转,但在第一种情况下只需反转一次.我不确定它在哪个规范中说这是你在每种情况下得到的(或者如果它).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读