F #을 배우려고하지만 fold 와 reduce 를 구별하려고 할 때 혼란스러워졌습니다 . 접기는 같은 일 을하는 것처럼 보이지만 추가 매개 변수를 사용합니다. 이 두 기능이 존재하는 합법적 인 이유가 있거나 다른 배경을 가진 사람들을 수용 할 수있는 이유가 있습니까? (예 : 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
. 예를 들어 .