Cercando di imparare F # ma è stato confuso quando si cerca di distinguere tra fold e reduce. Fold sembra fare lo same thing ma prende un parametro extra. C'è una ragione legittima per queste due funzioni di esistere o sono lì per ospitare persone con background diversi? (Ad esempio: String e stringa in C#)Differenza tra piega e riduzione?
Ecco frammento di codice copiati dal campione:
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])
È possibile scrivere ridurre e piegare in termini di ogni altro, ad esempio 'fold f a l' può essere scritto come' reduce f a :: l'. – Neil
@Neil - L'implementazione di 'fold' in termini di' reduce' è più complicata di così - il tipo di accumulatore di 'fold' non deve essere lo stesso del tipo di cose nella lista! –
@TomasPetricek Errore mio, originariamente intendevo scriverlo al contrario. – Neil