パターンマッチングを使用して、リストのlat要素を決定するコード:
@tailrec
def last_rec[A](list : List[A]) : A = {
list match {
case (x :: Nil) => x
case (_ :: xs) => last_rec(xs)
case Nil => throw new NoSuchElementException
}
}
コードをコンパイルしたいのですが、コンパイラーから「怒鳴られ」ます。
PS D:\workspace\scala\P99> scalac .\P01.scala
.\P01.scala:18: error: could not optimize @tailrec annotated method last2: it contains a recursive call not in tail position
case Nil => throw new NoSuchElementException
^
one error found
@tailrecアノテーションを削除すると、コードがコンパイルされます。テールレックの最適化を行うためにコードを変更するにはどうすればよいですか?