如何使用F#的List.fold实现同符号相邻数字求和并补全代码空缺
问题解决说明
你提供的初始模板存在两处需要调整的细节:
elif System.Math.Sign(x)里的x是累加结果列表,无法直接取符号,需要取列表头部元素(累加器逻辑是把新元素拼在列表头部,头部元素就是上一步处理的最后一个数值)List.fold输出的列表是倒序的,最后需要额外反转才能得到正确顺序的结果
空缺代码片段答案
... 处需要填写的内容为:(List.head x + y) :: List.tail x
完整可运行代码
let sumAdjacentOfSameSign (lst :int list) : int list = let f x y = if x.Length = 0 then [y] elif System.Math.Sign(List.head x) = System.Math.Sign(y) then (List.head x + y) :: List.tail x else y :: x List.fold f [] lst |> List.rev
调用测试:输入sumAdjacentOfSameSign [5;-2; -6; 7; -2; 2; 14; 2],可直接得到目标结果[5; -8; 7; -2; 18]
内容的提问来源于stack exchange,提问作者SarpSTA
相关产品推荐
相关产品推荐

