พยายามเรียนรู้ F # แต่มีสับสนเมื่อพยายามที่จะแยกแยะความแตกต่างระหว่างการพับและลด การพับดูเหมือนจะทำสิ่งเดียวกันแต่ใช้พารามิเตอร์พิเศษ มีเหตุผลอันชอบธรรมที่ทำให้ฟังก์ชันทั้งสองนี้มีอยู่หรือมีขึ้นเพื่อรองรับผู้ที่มีภูมิหลังที่แตกต่างกัน? (เช่น: สตริงและสตริงใน 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