Список неизменен в OCaml, вы не можете это изменить. Вы можете написать функцию append
, которая принимает список и возвращает новый список, который добавляет к нему элемент.
Например, здесь есть функция prepend
, которая принимает список и элемент и возвращает новый список с заданным элементом, добавленным к переданному списку,
let prepend xs x = x :: xs
append
Функция немного сложнее, поскольку списки в OCaml являются односвязными, поэтому их легко добавлять, но сложно добавлять. Для реализации функции append
необходим промежуточный список, назовем его acc
для аккумулятор . Затем вы go просматриваете каждый элемент списка ввода и добавляете его в аккумулятор. Поскольку вы делаете предварительный запрос, то после того, как список ввода закончится, ваш аккумулятор будет иметь все элементы списка ввода в обратном порядке, т. Е. Первый элемент (он же заголовок) списка acc
будет последним элемент списка ввода. Теперь вам осталось добавить элемент, который мы хотим добавить в обратный список acc
, и выполнить обратное действие. Вот код скелета для вас
let append xs x =
let rec loop xs acc = match xs with
| ... -> ... in
loop xs []