【发布时间】:2020-12-01 02:44:30
【问题描述】:
到目前为止,我知道如何从列表的末端扩展列表,但由于第一个条件,即加倍单例,它们最终会加倍。这样的代码是否有意义:
sumExpand :: [Integer] -> [Integer]
sumExpand l = expand l []
where
expand [] a = a
expand (x:[]) a = x: expand [] (x:a)
expand (x:xs) a = expand (x:a) (expand xs a)
让我处理它的输出:
[1,1,2,2,3,3] from [1,2,3]
instead of [1,3,5,3]
后者是我的愿望?以下是我如何找到包含两个元素的列表的临时解决方案:
expand (x:xs) a = x: tail (expand (map (x+) xs) (last xs:a))
输出:
*Main> sumExpand [1,2]
[1,3,2]
*Main> sumExpand [1,2,3]
[1,7,4,3]
编辑:基本上,我希望算法像这样工作:[a, b, c] => [a, a+b, b+c, c]
【问题讨论】:
-
您的算法究竟应该做什么?你有什么问题?
-
您想在每对之间插入每个相邻对的总和吗?
[a, b, c] => [a, a+b, b, b + c, c]? -
我想做的是:
[a, b, c] => [a, a+b, b+c, c]。它与@chepner 建议的基本相同,但没有重复。 -
列表中超过 3 个元素怎么样?比如说,[a, b, c, d] => [a, a+b, b+c, c+d, d]?
-
我有解决方案,但你能给我一些关于如何提高我的研究或解决问题的能力的建议吗?当这样的事情发生时?我刚投了反对票,我想改进。提前致谢。