Я работаю с материалами Scala Labs и создаю функцию, которая, в конце концов, возвращает что-то вроде этого: tails(List(1,2,3,4)) = List(List(1,2,3,4), List(2,3,4), List(3,4), List(4), List())
Я получил эту работу, используя две функции ииспользование некоторой рекурсии для второго.
def tails[T](l: List[T]): List[List[T]] = {
if ( l.length > 1 )trailUtil(List() ::: List(l))
else List() ::: List(l);
}
def trailUtil[T](l:List[List[T]]) : List[List[T]] = {
if ( l.last.length == 0)l
else trailUtil(l :+ l.last.init);
}
Все это хорошо, но меня беспокоит, что мне нужны две функции для этого.Я попытался переключиться: trailUtil(List() ::: List(l))
для анонимной функции, но я получил эту ошибку type mismatch; found :List[List[T]] required:Int
из IDE.
val ret : List[List[T]] = (ll:List[List[T]]) => {
if ( ll.last.length == 0) ll else ret(ll :+ ll.last.init)
}
ret(List() ::: List(1))
Может кто-нибудь указать мне, что я делаю неправильно, или лучший способ сделать это было бы замечательно.
(Я смотрел на это ТАК сообщение, но другой тип просто не работает для меня):