【发布时间】:2012-02-21 18:32:57
【问题描述】:
尝试学习 F#,但在尝试区分 fold 和 reduce 时感到困惑。 Fold 似乎做了same thing 但需要一个额外的参数。这两个功能的存在是否有正当理由,或者它们的存在是为了容纳不同背景的人? (例如:C#中的字符串和字符串)
这是从示例中复制的代码 sn-p:
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])
【问题讨论】:
-
你可以写reduce和fold,例如
fold f a l可以写成reduce f a::l。 -
@Neil - 用
reduce实现fold比这更复杂 -fold的累加器类型不必与列表中事物的类型相同! -
@TomasPetricek 我错了,我本来打算反过来写的。
标签: f# functional-programming reduce fold