Я написал функцию:Добавление элементов в списке слева OCaml
let rec addAll f l =
match l with
| [] -> 0
| [x] -> x
| hd::tl -> let combined = addAll f tl in
f (hd) combined
;;
I работает как с названием, он будет добавлять все элементы списка. Однако я хочу написать эту программу, так что она левая ассоциативная, поэтому вместо объединения элементов [1; 2; 3] в качестве 1 - (2 - 3), я хочу, чтобы это было: (1 - 2) - 3.
Любые намеки на то, как я могу сделать это вперед рекурсивным, а не хвостом? Или как я могу это сделать, чтобы эта функция работала так, как я предполагаю? Я знаю, что могу просто отменить список, но я хочу попробовать другой путь.
благодарственное вы, хорошо объяснение. Мне немного понравился ответ В. Мишеля, в котором не было аккумулятора. Однако ваше объяснение было более тщательным. – Jeremy
Аккумулятор, первый элемент ввода повторно используется как таковой. –
Однако код V Michel более изящный. –