sum 2列表并在f#中获得第3名,请更正我的语法

Omu*_*Omu 0 .net f#

我正在努力实现这个目标:

7 2 3 5
10 12 20

res = 10 + max(7,2) ; 12 + max(2,3); 20 + max(3,5)
Run Code Online (Sandbox Code Playgroud)

到目前为止这是我的代码:

//prevline.count is always currLine.count+1

let getResLine currLine prevLine =
   let rec loop resLine prevLine' = function
       |[] -> resLine
       |hd::tl -> loop (hd + (max (List.nth prevLine' 0) (List.nth prevLine' 1)))::resLine (List.tail prevLine') tl
   loop [] prevLine currLine
Run Code Online (Sandbox Code Playgroud)

但它没有编译,它告诉我一些类型不匹配的错误,可能有更多经验的人可以看到我做的一些明显的错误,请帮助

编辑:根据建议更新我的代码,但它仍然无法正常工作

yam*_*men 9

顺便说一下,您可能对另一种查看问题的方式感兴趣.从数字列表开始:

let nums1 = [7; 2; 3; 5]
let nums2 = [10; 12; 20]
Run Code Online (Sandbox Code Playgroud)

然后

let res = nums1 
          |> Seq.pairwise 
          |> Seq.map2 (fun a (b1, b2) -> a + max b1 b2) nums2
Run Code Online (Sandbox Code Playgroud)

这样做的好处是在语义上与您想要做的更匹配.

编辑:使用简化map2的,而不是zipmap感谢@Daniel和@JonHarrop.

  • @ChuckNorris我可以更好地遵循yamen的代码,而不是我可以关注你的问题. (5认同)