Próbujesz nauczyć się F #, ale mylić, próbując rozróżnić między fold i reduce. Fold wydaje się robić same thing, ale przyjmuje dodatkowy parametr. Czy istnieje uzasadniony powód, by te dwie funkcje istniały, czy też są one dostępne dla osób o różnym pochodzeniu? (Np: String i ciąg w C#)Różnica między krotnie i zmniejszyć?
Oto fragment kodu skopiowany z próbką:
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])
można napisać redukcji i złożyć na warunki siebie, na przykład 'fold f a l' można zapisać jako' reduce f a :: l'. – Neil
@Neil - Implementacja 'fold' w terminach' reduce' jest bardziej skomplikowana - typ akumulatora 'fold' nie musi być taki sam jak typ rzeczy na liście! –
@TomasPetricek Mój błąd, początkowo zamierzałem napisać to na odwrót. – Neil