Намагаючись вивчити 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
.