【发布时间】:2016-05-14 06:13:19
【问题描述】:
我正在尝试在给定输入(长度和函数)的 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 函数只接受一个变量 x 并返回它:
def f(x:Int)=x
下面的评论是有道理的,但它仍然让我出错。我认为编辑后的代码更容易到达我想去的地方
但是,现在我得到了一个无限循环。我遗漏了哪一部分逻辑?
【问题讨论】:
-
您的函数 arg
f声明它接受Int并返回A。您正在尝试调用f,传入listHelper的结果,您说它返回List[Int]。您正在尝试将List[Int]提供给您定义为采用Int的函数,因此类型不匹配 -
你认为非零的情况有什么作用?您需要使用整数调用 f,并将其添加到长度为
length-1的列表中。相反,您只是使用相同的参数递归调用自己 => 无限循环 -
“但是,现在我得到一个空列表作为返回” 在我写这篇文章时,您的问题中的代码不会给出一个空列表,而是无限循环。所以你没有运行那个代码。我们无法猜测您实际使用的是什么代码,因此我们无法说出您错过了什么。
-
我的测试出错了。我没有保存为此编写的新测试用例。所以空列表指的是别的东西。所以现在我意识到,这个特定的案例确实会永远循环。我会编辑那个...
-
f 属于 A 型,不需要 int..