Как указано в других ответах, вы пропускаете последнее условие else
.Вы можете получить это немедленно, если вы конвертируете код для использования сопоставления с образцом, например:
def otpu (start : Int, end : Int) : List[Int] = {
start match {
case `end` => List(end)
case _ if start > end => start::otpu(start-1, end)
case _ => Nil
}
}
РЕДАКТИРОВАТЬ:
Я заметил тег recursion
в вопросе, и я подумал, что выВозможно, вы захотите получить рекурсивную функцию для этого.То, как вы реализовали рекурсивную функцию, на самом деле небезопасно из-за того факта, что для очень (очень) большого списка, который будет создан в выходных данных, вы можете столкнуться с ошибкой времени переполнения стека.Чтобы избежать этого, Scala дает вам возможность использовать хвостовые рекурсивные функции.Вот как это будет выглядеть:
def otpu(start: Int, end: Int) : List[Int] = {
import scala.annotation.tailrec
@tailrec
def f(e: Int, acc: List[Int]): List[Int] = {
start >= e match {
// base step
case false => acc
// recursive step
case true => f(e+1, e::acc)
}
}
// call the recursive function with the empty accumulator
f(end, Nil)
}