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])
fold
açısından uygulama yapmak reduce
bundan daha karmaşıktır - biriktiricinin fold
türü listedeki şeylerin türüyle aynı olmak zorunda değildir!
fold f a l
olarak yazılabilirreduce f a::l
.