GOOGLE ADS

воскресенье, 10 апреля 2022 г.

OCaml - Переместить последний элемент списка на передний план

Во-первых, я приношу извинения, если это запутанный или обратный способ сделать то, что я хочу сделать, но я новичок в «стиле OCaml».

Я хочу взять последний элемент списка и переместить его в начало списка, сдвинув все элементы вверх на один.

Например: иметь[1;2;3;4;5] -> [5;1;2;3;4]

Я понимаю, что списки в OCaml в основном представляют собой связанные списки, поэтому я планирую рекурсивно проходить по списку, находить последний элемент, а затем указывать последний/оставшийся список этого элемента на начало списка.

Что меня в основном смущает, так это то, как разорвать ссылку от предпоследнего элемента к последнему элементу. В приведенном выше примере я хочу, чтобы 5 указывало на 1, а 4 больше не указывало на 5.

Как мне это сделать, и есть ли более простой способ взглянуть на это, что я полностью отсутствует?


Решение проблемы

Вы не можете «разорвать связь», потому что списки Ocaml являются постоянной структурой данных. Вы не можете изменить списки, поэтому вам нужно создать новый список со значениями в том порядке, в котором вы хотите.

let thelist = [1;2;3;4;5] in
let lnewhead = List.hd (List.rev thelist) in
lnewhead:: (List.rev (List.tl (List.rev b)));;

Вы также можете определить это в функции:

let flipper = fun thelist -> 
(List.hd (List.rev thelist)):: (List.rev (List.tl (List.rev thelist)));;
val flipper: 'a list -> 'a list = <fun>
# flipper([1;2;3;4;5]);;
-: int list = [5; 1; 2; 3; 4]

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...