F # öğrenmeye çalışıyorum ama katla ve indirgemeyi ayırt etmeye çalışırken kafam karıştı . Fold aynı şeyi yapıyor gibi görünüyor ancak fazladan bir parametre alıyor. Bu iki işlevin var olmasının meşru bir nedeni var mı yoksa farklı geçmişlere sahip insanları barındırmak için var mı? (Örneğin: C # 'da dize ve dize)
Örnekten kopyalanan kod parçacığı:
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])
foldaçısından uygulama yapmak reducebundan daha karmaşıktır - biriktiricinin foldtürü listedeki şeylerin türüyle aynı olmak zorunda değildir!
fold f a lolarak yazılabilirreduce f a::l.