gpt4 book ai didi

list - Ocaml - 将列表的最后一个元素移到前面

转载 作者:行者123 更新时间:2023-12-04 15:13:13 24 4
gpt4 key购买 nike

首先,如果这是我想要完成的事情的困惑或倒退的方式,我深表歉意,但我是“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]

关于list - Ocaml - 将列表的最后一个元素移到前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com