Я подозреваю, что за вас голосуют, потому что это тот тип основного вопроса, на который, вероятно, лучше всего ответить, взглянув на введение в OCaml или функциональное программирование в целом.
Основная идея сгибов в целом и List.fold_left
, в частности, должен поддерживать некоторое состояние при обходе коллекции (или списка в частности).Когда вы говорите, что хотите «сохранить» значение, естественным ответом будет то, что значение будет частью состояния, которое вы поддерживаете при обходе списка.
Шаблон для вызова List.fold_left
выглядит следующим образом:
let final_state =
List.fold_left update_function initial_state list
Функция обновления принимает текущее состояние и следующий элемент списка и возвращает значение следующего состояния.Вот так это выглядит так:
let update_function old_state list_element =
let new_state =
(* compute based on old state and element *)
in
new_state
Таким образом, явный ответ на ваш вопрос заключается в том, что ваша функция обновления (функция, которую вы «сверните» по списку) будет сохранять значение, возвращая его как частьновое состояние.
Вот некоторый код, который возвращает наибольшее неотрицательное целое число, которое он видит в списке:
let largest_int list =
let update largest_so_far element =
max largest_so_far element
in
List.fold_left update 0 list
Этот код «сохраняет» наибольшее из увиденных до сих пор int, возвращая егов качестве значения функции обновления.(Обратите внимание, что он возвращает значение 0 для пустого списка.)