在Ocaml中保存附加列表

时间:2014-10-04 22:47:49

标签: list append ocaml

上下文:

我正在尝试在中定义一个函数insert列表中的元素xheadtail列表,取决于新元素是否小于列表的当前head

问题:

问题在于,当我运行我创建的一些代码(显示在底部)时,我的列表将返回其原始状态,而不保存先前完成的追加。我意识到我可以使用新变量的简单let语句来执行此操作,但我想将新列表另存为当前表单。甚至可以在中完成,而无需创建新列表吗?

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

研究

我正在查看this answer on SO,并已将其合并到我的代码中。但是,当我运行此代码时:

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]

1 个答案:

答案 0 :(得分:1)

这是不可能的。 OCaml的列表是不可变的,你无法改变它。你不能改变它的值,你不能改变它的长度。