私は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)
}
}
コンパイラが再帰呼び出しを最適化するかどうか知りたいです。再帰呼び出しは、先頭の比較が成功した場合にのみ発生します。そうでない場合は、早期に爆撃し、末尾再帰の最適化を実現する方法はありますか?