11 votes

Existe-t-il un moyen d'affirmer qu'une fonction est reconnue comme récursive en queue par le compilateur ?

Disons que j'ai écrit une fonction en Haskell et que je veux affirmer qu'elle est récursive en queue et qu'elle sera optimisée par le compilateur. Existe-t-il un moyen de le faire ?

Je sais qu'il y a un moyen de le faire en Scala avec @tailrec annotation.

Exemple :

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)
  }
}

1voto

radrow Points 752

En ce qui concerne GHC 8.8.2, la récursion de queue ne peut pas être affirmée avec force par un pragme ou un mot-clé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X