Đang cố gắng tìm hiểu F # nhưng bị nhầm lẫn khi cố gắng phân biệt giữa fold và reduce. Gấp dường như thực hiện same thing nhưng có thêm tham số. Có một lý do chính đáng nào cho hai chức năng này để tồn tại hay chúng ở đó để thích ứng với những người có nguồn gốc khác nhau? (Ví dụ: String và chuỗi trong C#)Sự khác biệt giữa gấp và giảm?
Dưới đây là đoạn mã sao chép từ mẫu:
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])
Bạn có thể viết giảm và gấp về nhau, ví dụ 'fold f a l' có thể được viết là' reduce f a :: l'. – Neil
@Neil - Việc thực hiện 'fold' về mặt' reduce' phức tạp hơn thế - kiểu tích lũy của 'fold' không nhất thiết phải giống như loại thứ trong danh sách! –
@TomasPetricek Sai lầm của tôi, ban đầu tôi định viết nó theo cách khác. – Neil