F#を学習しようとしましたが、フォールドとリデュースを区別しようとすると混乱しました。Foldも同じように見えますが、追加のパラメーターを受け取ります。これらの2つの機能が存在する正当な理由はありますか、それとも背景が異なる人々に対応するためにありますか?(例:文字列および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
。例えば、のように書くことができます。