gpt4 book ai didi

Scala 尾递归对短路 bool 运算的优化

转载 作者:行者123 更新时间:2023-12-04 05:06:21 25 4
gpt4 key购买 nike

我在 Scala 中写了一个这样的函数:

def isSorted[T](list : List[T])(compare : (T, T) => Boolean) : Boolean = {
list match {
case Nil => true
case x :: Nil => true
case x :: rest => !compare(rest.head, x) && isSorted(rest)(compare)
}
}

我很好奇编译器是否会优化递归调用。递归调用只有在前导比较成功时才会发生。如果没有,有没有办法提前轰炸并仍然实现尾递归优化?

最佳答案

因此,正如@omnomnom 所说,您可以通过添加 @tailrec 来检查是否某些东西正在被 TCO 控制。方法的注释。如果编译器无法对其进行优化,则会抛出错误。

我们可以通过一个简单的例子来验证这一点:

@tailrec
def fact(n : Int) : Int = fact(n - 1) * 2

编译器会出现以下错误:

test.scala:6: error: could not optimize @tailrec annotated method fact: it contains a recursive call not in tail position



然而,在你的程序上尝试这个,答案是......是的!所以显然编译器很乐意优化你的尾调用:-)

关于Scala 尾递归对短路 bool 运算的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503437/

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