在Ocaml中保存附加列表 背景:

在Ocaml中保存附加列表 背景:,ocaml,list,append,Ocaml,List,Append,我试图在中定义一个函数,根据新元素是否小于列表的当前头或尾在列表中插入一个元素x 问题: 问题是,当我运行我创建的一些代码(如下图所示)时,我的列表会返回到其原始状态,而不会保存以前完成的追加。我意识到我可以用一个新变量或相同变量的简单的let语句来实现这一点,但我只想将新列表保存为其当前形式。甚至可以在不创建新列表的情况下完成此操作吗 我的问题是:在不创建新列表或变量的情况下,如何将其附加到列表并以新形式保存。 研究: 我正在查看,并且已经将其合并到我的代码中。但是,当我运行此代码时: let

我试图在
中定义一个函数,根据新元素是否小于列表的当前
在列表中插入一个元素
x

问题: 问题是,当我运行我创建的一些代码(如下图所示)时,我的列表会返回到其原始状态,而不会保存以前完成的追加。我意识到我可以用一个新变量或相同变量的简单的
let
语句来实现这一点,但我只想将新列表保存为其当前形式。甚至可以在不创建新列表的情况下完成此操作吗

我的问题是:在不创建新列表或变量的情况下,如何将其附加到列表并以新形式保存。

研究: 我正在查看,并且已经将其合并到我的代码中。但是,当我运行此代码时:

let rec insertion x y = 
  match y with 
    | [] -> x::y 
    | h::tl -> if h >= x then x::y 
               else           y@[x]
;;
,并附有:

let y = [1;2;3];;
insertion 0 y  ;;
y              ;;
我返回:

val y : int list = [1; 2; 3]
- : int list = [0; 1; 2; 3]
- : int list = [1; 2; 3]

这是不可能的。OCaml的列表是不可变的,您不能更改它。您不能更改其值,也不能更改其长度。

谢谢!我觉得这有点奇怪,因为我以前的经验来自于总是能够改变列表的形式。也就是说,最好的方法是做一个
让nList=插入一些值一些列表
?如果是这样的话,您是否介意将其添加到您的答案中?OCaml是函数式编程语言。因此,默认情况下,大多数数据结构都是不可变的(如我们所说,是持久的)。另外,请注意,表达式
let var=expr
实际上不会将
var
的值更改为
expr
,它只是创建一个新绑定,即将名称
var
绑定到某个对象
expr
。如果只是碰巧,在当前范围中,这样的名称已经存在,那么它只是被隐藏(cf,python的映射)。这就是为什么我们尽量不使用“变量”一词,因为它可能会让新手感到困惑。我们使用名称和值。希望,这有帮助!再次感谢!我也想澄清这一点,因为我之前评论中的代码片段是我正在寻找的解决方案(但不愿意使用>),