Я пытаюсь создать список в scala, который дал бы данные (длина и функция), результатом будет список от 0 до этой длины-1.Ошибка в логике рекурсивного списка
, например:
listMaker(3,f) = List(0,1,2)
до сих пор я создал вспомогательный класс, который принимает 2 int
и возвращает list
в этом диапазоне.
функция listMaker
выглядит следующим образом:
def listMaker[A](length:Int, f:Int =>A):List[A] = length match{
case 0 => List()
case _ => listMaker(length,f)
}
моя f
функция просто принимает переменную х и возвращает следующее:
def f(x:Int)=x
комментарий ниже имеет смысл, но он по-прежнему получает меня ошибки , Я думаю, что отредактированный код - это более простой способ получить, где бы я хотел:
Однако теперь я получаю бесконечный цикл. Какую часть логики мне не хватает?
Ваша функция arg, 'f' утверждает, что она принимает' Int' и возвращает 'A'. Вы пытаетесь вызвать 'f', переданный в результате' listHelper', который вы указали, возвращает 'List [Int]'. Вы пытаетесь предоставить «List [Int]» в функцию, которую вы определили как принимающую «Int», следовательно, несоответствие типа – cmbaxter
. Как вы думаете, что делает ненулевой случай? Вам нужно вызвать f с целым числом и добавить его в список длины 'length-1'. Вместо этого вы просто вызываете себя рекурсивно с теми же аргументами => бесконечный цикл –
«Однако теперь я получаю пустой список в качестве возврата». Код в вашем вопросе, поскольку я пишу это, НЕ дает пустой список, но бесконечно петли , Таким образом, вы не используете этот код. Мы не можем догадаться, какой код вы используете, поэтому мы не можем сказать, что вы пропустили. –