Ваш алгоритм неверен.Даже с улучшением @ Kim, isOrdered(List(4,3,5,4))
возвращает true
.
Попробуйте:
def isOrdered(l:List[Int]): Boolean = l match {
case Nil => true
case x :: Nil => true
case x :: y :: t => if (x <= y) isOrdered(l.tail) else false
}
(также обновлено, чтобы знаки были правильными)
edit : мой предпочтительный макет будет таким:
def isOrdered(list: List[Int]): Boolean = list match {
case Nil => true
case x :: Nil => true
case x :: xs => if (x > xs.head) false
else isOrdered(xs)
}
Быстрый способ, если производительность не проблема, будет
def isOrdered(l: List[Int]) = l == l.sorted