尝试学习F#,但在区分折叠和缩小时感到困惑。折叠似乎做同样的事情,但是需要一个额外的参数。是否存在这两个功能存在的正当理由,或者它们存在以容纳不同背景的人?(例如:字符串和C#中的字符串)
这是从样本复制的代码片段:
let sumAList list =
List.reduce (fun acc elem -> acc + elem) list
let sumAFoldingList list =
List.fold (fun acc elem -> acc + elem) 0 list
printfn "Are these two the same? %A "
(sumAList [2; 4; 10] = sumAFoldingList [2; 4; 10])
fold
而言reduce
比这复杂得多-的累加器类型fold
不必与列表中的事物类型相同!
fold f a l
可以写成reduce f a::l
。