Я учу OCaml.В настоящее время я рассматриваю некоторые реализации итераторов по умолчанию для списков, и меня немного смущает одна часть fold_left
.
let rec fold_left f accu l =
match l with
[] -> accu
| a::l -> fold_left f (f accu a) l
Часть, в которой я запутался, это (f accu a)
,Я разобью его настолько, насколько я понимаю.
f
- это функция, переданная в fold_left
, которая должна применяться к каждому элементу в списке. accu
- это аккумулятор, который отслеживает сложенную сумму. a
- это элемент во главе l
, список передан в fold_left
.
Почему аккумулятор передается в f
?Разве это не должна быть сумма аккумулятора и возвращаемое значение f a
?
И как все это возвращает один int
, каким должен быть аккумулятор (предположительно)?1027 *