Мое понимание разницы между List.fold
и List.foldBack
заключается в том, что foldBack выполняет итерацию по списку в обратном порядке. Обе функции накапливают результат из элементов в списке.
У меня возникли проблемы с хорошим примером, где лучше сбросить список. В примерах, которые я придумал, результаты одинаковы для fold и foldBack, если логика функций делает то же самое.
[<Fact>]
let ``List.foldBack accumulating a value from the right to the left``() =
let list = [1..5]
let fFoldBack x acc =
acc - x
let fFold acc x =
acc - x
let foldBackResult = List.foldBack fFoldBack list 0
let foldResult = List.fold fFold 0 list
Assert.Equal( -15, foldBackResult ) // 0 - 5 - 4 - 3 - 2 - 1
Assert.Equal( -15, foldResult ) // 0 - 1 - 2 - 3 - 4 - 5