Пытался изучить F #, но запутался, пытаясь различить свертку и свертку . Кажется, что Fold делает то же самое, но принимает дополнительный параметр. Есть ли законная причина для существования этих двух функций или они предназначены для людей с разным опытом? (Например: строка и строка в 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
.