我在 Haskell 中做一个编程练习,其中我在一个列表中给出了一些值,例如 [1, 2, 2, 3, 4] 应该如下 [1, 4, 3, 4]。到目前为止,该程序使用以下代码对我来说没有问题:
sustituirSumando [x,y]
| x==y = [x+y]
| otherwise = [x,y]
sustituirSumando [x,y,z]
| x==y = [x+y,z]
| y==z = [x,y+z]
|otherwise = [x,y,z]
sustituirSumando (x:y:xs)
| x==y = (x+y) : sustituirSumando (xs)
| otherwise = x: sustituirSumando (y:xs)
我不知道如何进行的地方是在下面的假设示例 [1, 2, 2, 4, 5] 中,列表应如下所示 [1, 8, 5] 但在我的代码中它仍然是 [1, 4 , 4, 5]。提前致谢。
您可以创建一个函数,该函数接收两个列表
int
作为输入并返回一个列表int
。我们需要两个输入,以便我们可以在函数中使用递归。第一项是存储每次迭代结果的列表。在第一次迭代中,第一个列表必须为空 (
[]
)。第二个条目是未在函数中处理的列表的其余部分。
我们一步一步地进行操作。
在每次迭代中,我们测试第一个列表的最后一个元素是否等于第二个列表的第一个元素。当第二个列表中不存在任何元素时,迭代结束。
在这里,我们使用
init
and函数last
来获取列表的特定部分。代码:
例子:
如果执行
suma1 [] [1, 2, 2, 4, 5]
,则操作为:如果您不想将空列表作为参数传递,则可以
suma1
从另一个函数调用:在递归中,您必须再次将加数添加到列表中。像这样的东西: