Я пытаюсь выяснить, сходятся ли числа в списке Scala. Когда я запускаю свои тестовые примеры, консоль печатает произвольный список и никогда не завершается, заставляя меня думать, что он застрял в бесконечном цикле.Почему Scala 'match' застрял в цикле forever
Функция isDescending должна принимать список как параметр и должна возвращать логическое значение. Мы должны использовать рекурсию и не можем использовать функции из пакета коллекций.
Код:
def isDescending(lst: List[Int]): Boolean ={
isDescendingHelper(lst, 0, true)
}
def isDescendingHelper(lst: List[Int], prev: Int, begin: Boolean): Boolean = {
lst match{
case Nil => true
case head :: tail => {
if (begin){
isDescendingHelper(lst, head, false)
} else if (head <= prev){
isDescendingHelper(lst, head, false)
} else {
false
}
}
}
}
Test Cases:
test("isDescending test case"){
assert(isDescending(List()))
assert(isDescending(List(0, 0, 0)))
assert(isDescending(List(3, 6, 8)))
assert(isDescending(List(3, 6, 8 , 7)) == false)
assert(isDescending(List(0)))
}
Вы должны передать 'tail' функции, а не' lst' with isDescendingHelper – Eduardo
В качестве побочного примечания рассмотрим, можно ли сделать эту функцию более кратким, используя 'zip' и другую функцию более высокого порядка. –