Scala 递归列表逻辑中的错误

Scala 递归列表逻辑中的错误,scala,recursion,Scala,Recursion,我试图在scala中构建一个列表,给定输入(长度和函数),输出将是一个从0到该长度-1的列表 例如: listMaker(3,f) = List(0,1,2) 到目前为止,我已经创建了一个helper类,它接受2int,并在该范围内返回一个list listMaker的功能如下所示: def listMaker[A](length:Int, f:Int =>A):List[A] = length match{ case 0 => List() case _ => li

我试图在scala中构建一个列表,给定输入(长度和函数),输出将是一个从0到该长度-1的列表

例如:

listMaker(3,f) = List(0,1,2)
到目前为止,我已经创建了一个helper类,它接受2
int
,并在该范围内返回一个
list

listMaker的
功能如下所示:

def listMaker[A](length:Int, f:Int =>A):List[A] = length match{
  case 0 => List()
  case _ => listMaker(length,f)
}
my
f
函数只取一个变量x并返回:

 def f(x:Int)=x 
下面的评论很有道理,但它仍然会让我出错。我认为编辑后的代码更容易到达我想去的地方


然而,现在我得到了一个无限循环。我缺少的是哪部分逻辑?

递归函数通常必须逐渐“咬掉”输入数据的一部分,直到什么都不剩——否则它永远无法终止

这意味着在您的特定情况下,
length
必须在每次递归调用时减小,直到它达到零

def listMaker[A](length:Int, f:Int =>A):List[A] = length match{
  case 0 => List()
  case _ => listMaker(length,f)
}
但是您并没有减少
长度
——而是将其原封不动地传递给下一个递归调用,因此,您的函数不能终止


(还有其他问题-您需要在递归时建立结果列表,但您当前的代码只返回一个空列表。我假设这是一个学习练习,所以我不提供工作代码…。

您的函数arg,
f
声明它取
Int
并返回
a
。您正试图调用
f
传递
listHelper
的结果,您声明的结果返回一个
List[Int]
。您试图将
列表[Int]
提供给您定义为接受
Int
的函数,因此类型不匹配您认为非零情况下会发生什么?您需要使用整数调用f,并将其添加到长度
length-1
的列表中。相反,您只是使用相同的参数递归调用自己=>infinite loop“然而,现在我得到一个空列表作为返回”在我写这篇文章时,您问题中的代码并没有给出一个空列表,而是无限循环。所以你没有运行那个代码。我们无法猜测您实际使用的代码,因此我们无法说出您遗漏了什么。我在测试中出错。我没有保存为此编写的新测试用例。因此,空列表指的是其他内容。现在我意识到,在这个特殊的情况下,它会永远循环。我会编辑,f是A型的,它不接受int,我有一个helper方法,它接受两个int并输出一个列表。我相信我必须在这个功能中工作。我在listMaker上使用f作为参数时遇到困难。是的,这是一个书本练习。我只是想学习一些编程方面的新技能。