有没有办法断言一个函数被编译器识别为尾递归?
Is there a way to assert that a function is recognized as tail-recursive by the compiler?
假设我在 Haskell 中编写了一个函数,我想断言它是尾递归的并且将由编译器优化。有办法吗?
我知道在 Scala 中有一种使用 @tailrec 注释的方法。
import scala.annotation.tailrec
class Factorial2 {
def factorial(n: Int): Int = {
@tailrec def factorialAcc(acc: Int, n: Int): Int = {
if (n <= 1) acc
else factorialAcc(n * acc, n - 1)
}
factorialAcc(1, n)
}
}
至于 GHC 8.8.2 尾递归不能通过任何 pragma 或关键字强制断言。
假设我在 Haskell 中编写了一个函数,我想断言它是尾递归的并且将由编译器优化。有办法吗?
我知道在 Scala 中有一种使用 @tailrec 注释的方法。
import scala.annotation.tailrec
class Factorial2 {
def factorial(n: Int): Int = {
@tailrec def factorialAcc(acc: Int, n: Int): Int = {
if (n <= 1) acc
else factorialAcc(n * acc, n - 1)
}
factorialAcc(1, n)
}
}
至于 GHC 8.8.2 尾递归不能通过任何 pragma 或关键字强制断言。